Skip to content

GraphX for .NET

Compare
Choose a tag to compare
@panthernet panthernet released this 06 Jan 12:07

RELEASE 2.3.0

HIGHLIGHTS:

  • Added new layout algorithm GroupingLayoutAlgorithm which allows to layout graph vertices by different groups each using its own sublayout algorithm. You can see it in action using new feature highlight in showcase app.
    Currently there are two modes supported:
    • Layout groups to predefined bounds, when you can specify rectangular bounds in which vertices are layed (Bounds must be supported by algorithm used to layout vertices group)
    • Generate bounds from groups, when each group is layouted using its algorithm and bounds are automatically calculated to fit all vertices in the group and then group bounds overlaps can be removed.
  • Added two new label controls AttachedEdgeLabelControl and AttachedVertexLabelControl which acts like separate entities in GraphArea visual tree and have weak references to graphx controls. Default EdgeLableControl and VertexLabelControl are designed to act as the part of their parent classes and this approach impacts their customization possibilities when these parent classes are limited in size. So with the new labels you can mitigate following restrictions:
  • No more label cuts when vertex is strictly limited in width or height
  • No more jerky edge endpoints when edge label is too large
  • No more labels behind edges or vertices. You can control how to inject them

To use new labels you have to specify GraphArea::VertexLabelFactory and GraphArea::EdgeLabelFactory factories to generate labels when graph is generated.

DETAILED CHANGELOG:

  • Added GroupId property to IGraphXVertex interface
  • Added parameters class RandomLayoutAlgorithmParams for corresponding algorithm. It contains Bounds property which can restrict vertex coordinates to respect provided bounds.
  • Added two methods to EdgeControl: GetEdgePointerForSource() and GetEdgePointerForTarget() which allows to get to edge pointer objects manualy
  • Added VertexShape.Ellipse math shape
  • Added support for reversing the geometry. This is required for animating shapes along a path where the direction needs to be reversed without using the Storyboard.AutoReverse property (thanks to bleibold)
  • Added two new attached label classes for Edge and Vertex controls.
  • Added EdgeControl::LabelMouseDown event
  • Added separate ID counter for edges while autoresolving missing ids
  • Added EdgeControl::UpdateLabel() method to be able to update attached edge label manually (tech means to overcome some template quizes)
  • Added GraphArea::GetChildControls() method to easily fetch any child objects (incl. custom) by condition or just get all of them
  • Added GraphArea::VertexLabelFactory and GraphArea::EdgeLabelFactory properties for corresponding label factories. Will generate labels automatically after the graph layout if defined
  • Added GraphArea::MoveToFront() and GraphArea::MoveToBack() methods that will move specified GraphArea child to the top/bottom of the visual tree respectively
  • Added MouseEventArgs for VertexDoubleClick event to be able to correctly block click event when you're dragging vertex and open dialog window at once
  • Added VertexControl::HideWithEdges() and VertexControl::ShowWithEdges() methods to hide/show the control and all related edges at once
  • Added new optional parameters for GraphArea add/remove objects methods to allow vertex/edge data to be added to data graph in a single method call
  • Added integer seed to ILayoutParameters to be used by alogrithms in order to get deterministic output.
  • Fixed id autoresolve issue when calling GraphArea::GenerateAllEdges() after manual edge data compilation (thanks to Hannes Hasenauer)
  • Fixed edge label visibility when hideing/showing edges through Visibility property [WPF]
  • Fixed some METRO code not that hasn't been ported correctly
  • Fixed an exception in ZoomControl caused by Ctrl + Alt + DblClick combination (thanks to persalmi)
  • Fixed NaN result for FR algorithms calc (thanks to bleibold)
  • Fixed edge bundling in the case when empty Control points are present that would sometimes cause exceptions.(thanks to bleibold)
  • Fixed bindings to DefaultEdgePointer::Visibility property
  • Fixed numerous event issues with graphX controls where events wasn't passed down the hierarchy tree
  • Fixed edge label size on some template manipulations by adding additional update on label size change event. You can turn it off using EdgeLabelControl::UpdateLabelOnSizeChange property.
  • Fixed vertex and edge display when directly manipulating Visibility property
  • Fixed edge labels display when they there generated hidden by default and then are displayed using ShowLabel property change
  • Fixed edge routing counting deleted vertices as obstacles for an edge
  • Improved styles flexibility by working with dependency values instead of straight assignment in some places
  • Improved random layout algorithm randomness by seeding new Guid hash which fixes some odd behavior in rare cases
  • Improved overall graph cleaning in different areas allowing to easily clean graph data and fix potentional memory leaks
  • Improved general graph showcase for Sugiyama like algorithms
  • Improved graph area control removal logic to be more extensible and allow to handle attached controls
  • Implemented edge cut logic for EdgePointer placed at edge 'source' to gain better visual quality like its 'target' counterpart
  • Implemented many changes in algorithm base classes, mainly in AlgorithmLayoutBase: made VisitedGraph and VertexPositions props assignable externally
  • Implemented RandomLayoutAlgorithm to derive from LayoutAlgorithmBase class
  • Made many methods virtual/protected for easier derived classes customization
  • Merged GraphArea code for WPF & METRO into the shared files
  • Merged EdgeControl and VertexControl code for WPF & METRO into the shared files

BREAKING CHANGES:

  • Changed Vertex and Edge ID type to Int64 (long) by default for easier id handling when working with databases and huge datasets. Was Int32.
  • IExternalLayoutAlgorithm interface now demands TEdge generic specification and have one new method ResetGraph().
  • All built-in algorithms now use IMutableVertexAndEdgeSet<TVertex, TEdge> for TGraph generic specification to be able to modify Graph data on demand.
  • Added mandatory IOverlapRemovalAlgorithm::Initialize() method for all OR algorithms to be able to initialize initial data not only when you instantiate class but at any time
  • IZoomControl interface now must implement Width and Height properties
  • IOneWayControlAnimation interface methods AnimateVertex/AnimateEdge now has an additional parameter which flags if data vertex/edge should be deleted after animation is complete.
    Any custom delete animations should be updated to handle this additional property.
  • HighlightBehaviour::HighlightStrategy property has been removed due to redundancy