Level Of Details

We are evaluating GoXam to replace GoDiagram in our application.
One of the things important to us is performance.
As I’ve read GoXam (like any WPF ItemsControl) does not handle large item set so well.
I’ve read about virtualization and I keep ask my self why not do data virtualization?

Let’s say I have some way to choose which nodes and links I show in different zoom factors I could create a “Level of details” virtualization in which I keep my nodes and links under then 5,000 level.

I would like to know if someone already did that and does it work “smooth”?

Thank you,

Have you read this post? Performance considerations

Yes, I have read this post carefully.
I take the performance limitation of WPF and GoXam as a fact and want to work with them to create clear image in reasonable performance.
I’ve ask the same question in StackOverflow and receive a link to article about implement LOD on network graph.

I will try to create a POC of what I’m trying to do.

Thank you,

Any help with Level Of Details idea will be great.
Is it better to have several diagrams that I switch between them, or maybe several Models?

Thank you,

I wouldn’t know how to make such judgements for your application.

Having a single diagram with multiple models is certainly possible.
But that means it has to re-create the Nodes and Links each time one switches models in a diagram.

Having multiple diagrams each with its own model is the default arrangement.
But this might increase the total memory consumption and updating overhead.

Having multiple diagrams sharing one model is another possibility.
This is what happens with the Overview control.

Using different templates for different scales is one way to improve performance.
That applies to all of the arrangements mentioned above.
But it prevents smooth zooming in/out when it switches templates.
In that case having separate diagrams helps avoid that issue, because, like the Overview control, you can make sure each Diagram is limited to certain scale ranges.

Hello Walter,
First I’m not asking about making decision for my application - that is off course my responsibility.

I’m asking in general way, ask you answer, about the possibilities of implement LOD suing GoWpf.

I’ve been thinking about two general graph strategies to implement LOD:

  1. For each cluster of closely-position nodes we will present single node
  2. For each two nodes that have links between them (no matter how many links) we will present only one link to reduce the complexity of the diagram.

It is very simplified way of look at it and does not go into detailes like what is “closely-position” and the fact that instead of simply display single link between nodes we can display a link with width in relation to the number of links between the two nodes.

To accomplish such implementation I have to create different model - is that right?

Thank you,

I suspect that you do not have to have multiple models for the two kinds of simplifications you are talking about.

  1. You could use a collapsed Group. In the Grouping sample, note that no nodes or model data are created as members of a group until the group is expanded the first time. When it is expanded, it adds node data and link data to the model as the members of the group and adds Nodes and Links corresponding to the new model data. You could also remove the member parts when the group is collapsed again.

You could implement this by overriding PartManager.FilterNodeForData and FilterLinkForData to return false if they are supposed to be members of a collapsed Group.

  1. You could override PartManager.FilterLinkForData to return false for duplicate links. That could also increment the Path.StrokeWidth of the existing Link.