Release Notes
yFiles WPF Version 4.0

Version 4.0.0.2 is the latest release for yFiles WPF in the yFiles WPF 4.0 major release series.
See the changelog for a list of all changes in this and all other versions.

To learn about the new features in version 4.0, have a look at About yFiles WPF Version 4.0.
Below you will find the technical requirements and a list of all new features and improvements.

Technical Requirements

  • Microsoft .NET 6.0 (or newer) or Microsoft .NET Framework 4.6.2 (or newer).
  • A browser to view the HTML documentation.
  • We recommend the use of a powerful IDE such as Microsoft Visual Studio or JetBrains Rider.

All changes
Version 4.0

This version brings a major overhaul of many parts of the API, resulting in a lot of incompatible changes. We have designed many functions to be simpler, more intuitive and more consistent and removed technical debt.

In addition, this release contains numerous new features, improvements, and bug fixes to all parts of the library.

For a tour of this release's highlights, have a look at the article about yFiles WPF 4.0.

If you are updating from an older version of yFiles WPF, have a look at the list of incompatible changes and at the more detailed description in the Migration Guide.

New Features, Improvements, and Bug Fixes

Categories: General Graph Controls Rendering Selection, Focus, Highlight Styles Interaction Label Editing Snapping Clipboard Folding View-Layout-Bridge Layout Hierarchical Layout Tree Layout Orthogonal Layout Edge Router Labeling Organic Layout Radial Tree Layout Series-parallel Layout Partial Layout Tabular Layout Component Layout Algorithms Analysis Geometry

General

New Features and Improvements

  • The yFiles library now consists of one single assembly.
  • All uses of the IListEnumerable<T> interface have been replaced by the IReadOnlyList<T> interface. This means that standard collections such as List<T> can now be used there. Accordingly, the ListEnumerableExtensions and ListEnumerable<T> classes have been removed.
  • The lookup API has been restructured. In particular, the LookupDecorator class is now easier to use, but most use cases are covered without having to access the low-level lookup architecture.
  • The assemblies now are strong-named as factory default.
  • The new LicenseConfig class offers a way to set the yFiles license data in code (as opposed to having to embed a resource file in the application).

Graph

New Features and Improvements

Bug Fixes

Controls

New Features and Improvements

Bug Fixes

  • Resizing a window with a GraphControl or programmatically changing a GraphControl's ContentBounds will no longer break scrolling animations.
  • Adding visuals without an explicit size directly to render tree groups (instead of VisualGroup instances) now works consistently. Previously, they may sometimes never have appeared.
  • Fixed an issue where a sequential animation would break when the preferred duration was set to zero.

Rendering

New Features and Improvements

Selection, Focus, Highlight

New Features and Improvements

Styles

New Features and Improvements

Bug Fixes

Interaction

New Features and Improvements

Bug Fixes

Label Editing

New Features and Improvements

Snapping

New Features and Improvements

Clipboard

New Features and Improvements

Folding

New Features and Improvements

  • The process of configuring edges at folder nodes has been simplified, resulting in a significant reduction in the number of configuration calls for merged edges.
  • The default implementation for folder nodes and folding edge converters has been enhanced, providing more powerful capabilities for synchronizing and initializing various aspects with granularity.
  • Collapsed group nodes (folder nodes) can now have different tags from their expanded form (group nodes).
  • Changes made to view states (folder nodes, folding edges) can now be reflected back to the master items. New methods, UpdateGroupNodeState and UpdateMasterEdges, have been added to IFolderNodeConverter and IFoldingEdgeConverter, respectively, for handling these updates.

Bug Fixes

  • Setting the source or target port of an edge to a port at another edge does no longer lead to an exception if the edge is represented in a managed view (IFoldingView). Instead, the edge is now removed from the view.
  • Fixed a bug which could cause an edge in a folding view to be created at different ports as those which were given as parameters. This could lead to unexpected connections during interactive edge creation in rare cases.
  • Fixed a bug that could lead to an exception when duplicating a port on the GraphClipboard if it is duplicated.
  • Fixed a bug which caused changing the ports on an edge whose source or target node is collapsed being reverted after subsequent collapsing and expanding.
  • Label changes on folder nodes are no longer reverted by FolderNodeConverter if labels are copied between master and view node.

View-Layout-Bridge

New Features and Improvements

Bug Fixes

  • The LayoutExecutor and LayoutGraphAdapter classes now correctly assign port group IDs to edges that connect to the same port. Previously, in some cases involving ports with a single incoming and outgoing edge, the port group IDs were omitted, which could cause incorrect layout results (such as diagonal segments instead of orthogonal ones).

Layout

New Features and Improvements

Bug Fixes

Hierarchical Layout

New Features and Improvements

  • The HierarchicalLayout class now supports defining minimum distances between the ports. They can be specified per node side using the HierarchicalLayoutNodeDescriptor.MinimumPortDistance property. The node size is increased if necessary in order to accommodate the minimum distances.
  • The Hierarchical Layout class now supports aligning the ports of edges incident to the same node, that is, the ports are placed at the same x- or y-coordinate. This can be particularly useful to visualize paths in a graph. Which ports to align is specified by the new properties PortData.SourcePortAlignmentIds and PortData.TargetPortAlignmentIds accessible via HierarchicalLayoutData.Ports.
  • The HierarchicalLayout now produces fewer bends for multi-edges with labels when integrated edge labeling is enabled.
  • The HierarchicalLayout class now produces better results for graphs with tabular groups where all children have a fixed user-specified order.
  • The routes of self-loops now consider both node and edge labels preventing overlaps if possible.
  • The ports of edges with free ports are no longer placed at the same location as fixed ports, which previously could happen if multiple edges had the same fixed port.
  • The HierarchicalLayout no longer produces overlapping edge segments if there are grouped edges with different thicknesses values. Previously, the user had to ensure that all these edges use the same thickness.
  • In barycenter mode the HierarchicalLayout now enforces a more symmetric placement of the nodes that are part of chains or height-2 trees.

Bug Fixes

  • The HierarchicalLayout class now always places aligned ports correctly in from-sketch mode.
  • The HierarchicalLayout class no longer assigns superfluous space to group nodes if there are grouped edges.
  • The HierarchicalLayout class no longer produces an error when using a non-zero grid distance in combination with incremental mode's exact coordinate hints.
  • The HierarchicalLayout class no longer produces an error for labeled graphs with port alignment constraints when the integrated edge label placement is enabled.
  • The HierarchicalLayout class no longer produces superfluous crossings between backloops or same-layer edges in the first or last layer.
  • The HierarchicalLayout now properly handles self-loop edges when the edge is at a group node and furthermore edge/port grouped with the same ID on both sides. Previously, it was not routed correctly or that it was removed from the LayoutGraph instance when running the layout algorithm directly on the graph instance without using a copy.
  • The HierarchicalLayout class no longer swaps the position of fixed nodes in incremental layout mode with user-specified sequence constraints.
  • The HierarchicalLayout class no longer produces superfluous crossings for some graphs with group nodes in incremental layout mode.
  • Edges between two subcomponents now correctly consider fixed any-side port candidates.
  • The HierarchicalLayout class no longer produces very long edge segments for some input graphs containing groups with node halos and polyline edge routing.
  • The HierarchicalLayout class no longer throws an exception for graphs with bus structures if the algorithm runs in incremental mode and the group transposition feature is enabled.
  • The HierarchicalLayout class no longer produces intertwined edge routes with many superfluous crossings and bends for some cases with sequence constraints PlaceAtHead or PlaceAtTail. The problem mainly occurred with graphs with groups or PartitionGrid and incompatible sequence constraints.

Tree Layout

New Features and Improvements

Bug Fixes

Orthogonal Layout

New Features and Improvements

Bug Fixes

  • The Orthogonal Layout now automatically places edge labels of the parallel edges handled by its ParallelEdgeRouter instance, when integrated edge labeling is enabled.

Edge Router

New Features and Improvements

  • The quality of edge routing for buses is improved.
  • If EdgeRouter is run with the buses feature and a limited duration, it now splits the available time amongst buses, meaning that it will not get "stuck" on a single bus, which could otherwise impact the quality of the remaining buses and non-bus edge routings.

Bug Fixes

  • The EdgeRouter now prefers to use fixed port candidates that are not overlapped by other nodes.
  • The EdgeRouter class no longer produces uncovered buses. Previously, there were some rare cases where the specified bus edges didn't constitute a bus.
  • When routing edges to and from fixed ports in the interior of group nodes, other nodes in the group are not ignored anymore, so that the edge does not overlap them if possible.

Labeling

Bug Fixes

Organic Layout

New Features and Improvements

  • The performance for the OrganicLayout has been substantially improved for large graphs without group nodes. The improvement is triggered if no special constraints are defined and no shape recognition is enabled.
  • The OrganicLayout now supports different styles for group substructures, which are set via the GroupSubstructureStyle property.

Bug Fixes

  • The Organic Layout now automatically places edge labels of the parallel edges handled by its ParallelEdgeRouter instance, when integrated edge labeling is enabled.
  • The OrganicLayout class no longer ignores the preferred edge length in incremental layout mode with a single affected element.
  • Fixed an issue that may have automatically disabled the component layout when using constraint-based features.

Radial Tree Layout

New Features and Improvements

Series-parallel Layout

Bug Fixes

  • The Series Parallel Layout now automatically places edge labels of the parallel edges handled by its ParallelEdgeRouter instance, when integrated edge labeling is enabled.

Partial Layout

New Features and Improvements

  • PartialLayout now supports specifying inversely directed edges in addition to undirected and directed edges.

Bug Fixes

  • PartialLayoutScopeData will no longer mark any edges as affected when only nodes are specified to be in scope, nor mark any nodes as affected when only edges are specified to be in scope.

Tabular Layout

New Features and Improvements

Bug Fixes

Component Layout

New Features and Improvements

Algorithms

New Features and Improvements

Bug Fixes

  • The Intersections class does not dispose FilteredGraphWrapper instances that it is given with no subgraph nodes or edges specified anymore. Previously, this caused the graph instance to become defunct, resulting in various operations running into null fields and properties, generating exceptions that were non-trivial to understand.

Analysis

New Features and Improvements

  • The KShortestPaths class has a new implementation of the k-shortest path algorithm that allows for the exclusion of non-simple paths (i.e., paths with repeating vertices). Previously, these paths could not be excluded. The new implementation is used by default and can be disabled with the SimplePaths parameter.
  • For usage with a LayoutGraph, the algorithm is also available via the LayoutGraphAlgorithms.KShortestPaths method.

Geometry

New Features and Improvements

  • The new GeneralPath.AreaOrPathContains method tests if the path fuzzily contains a point and can be used for hit-testing a GeneralPath.
  • All methods on the GeneralPath class that accept points now have overloads for IPoint and PointD, and all methods that accept rectangles now have overloads for IRectangle and RectD.
  • There are now methods on RectD and PointD to calculate the distance between points and rectangles.
  • The GeneralPath.GetProjection method is now faster for paths with Bezier segments.
  • The IRectangle interface no longer implements IPoint. As a consequence, it is no longer possible to inadvertently use rectangles as parameters for methods that expect a point. You can still easily get the top-left corner of a rectangle with its GetTopLeft method. Similarly, IMutableRectangle no longer implements IMutablePoint.
  • All the basic geometry types now have a consistent conversion method to the respective WPF geometry types.

Incompatible Changes

Categories: General Graph Controls Rendering Selection, Focus, Highlight Styles Interaction Snapping Clipboard Folding Lookup GraphML View-Layout-Bridge Layout Layout Data Hierarchical Layout Tree Layout Orthogonal Layout Edge Router Labeling Organic Layout Interactive Organic Layout Circular Layout Radial Layout Radial Tree Layout Radial Group Layout Series-parallel Layout Compact Disk Layout Multi-page Layout Partial Layout Tabular Layout Component Layout Tree Map Layout Recursive Group Layout Layout Grid Other Layouts Algorithms Analysis Collections Geometry

General

Incompatible API Changes

Graph

Incompatible API Changes

Incompatible Behavior Changes

Controls

Incompatible API Changes

Incompatible Behavior Changes

Rendering

Incompatible API Changes

Selection, Focus, Highlight

Incompatible API Changes

Styles

Incompatible API Changes

Interaction

Incompatible API Changes

Incompatible Behavior Changes

Snapping

Incompatible API Changes

Clipboard

Incompatible API Changes

Folding

Incompatible API Changes

Incompatible Behavior Changes

  • Tags are not automatically the same on group and folder nodes or master and folding edges (master and view states). Instead, they have to be synchronized using the IFolderNodeConverter and IFoldingEdgeConverter implementations. The default implementations already synchronize the tags.
  • In the graph of a folding view, the CreateGroup method now always creates a group even if the isExpanded predicate specified in the FoldingManager.CreateFoldingView method specifies otherwise. Create the group on the master graph if you want the predicate to be respected.

Lookup

Incompatible API Changes

GraphML

Incompatible API Changes

View-Layout-Bridge

Incompatible API Changes

Incompatible Behavior Changes

  • Edges at the same port are now always automatically port grouped unless port groups have been defined explicitly.
  • The LayoutGraphAdapter class does no longer offer a method to create a layout graph several times but is now meant to create exactly one layout graph copy which can be accessed via the LayoutGraph property and initialized with method LayoutGraphAdapter.Initialize. After initialization, changing properties of the LayoutGraphAdapter has no effect anymore.

Layout

Incompatible API Changes

Incompatible Behavior Changes

Layout Data

Incompatible API Changes

Hierarchical Layout

Incompatible API Changes

Incompatible Behavior Changes

Tree Layout

Incompatible API Changes

Incompatible Behavior Changes

  • The TreeLayout now considers node labels by default.
  • The TreeLayout now places edge labels by default using an integrated labeling algorithm.
  • Port candidates are always considered if they are specified.

Orthogonal Layout

Incompatible API Changes

Incompatible Behavior Changes

Edge Router

Incompatible API Changes

Incompatible Behavior Changes

Labeling

Incompatible API Changes

Organic Layout

Incompatible API Changes

Incompatible Behavior Changes

Interactive Organic Layout

Incompatible API Changes

Circular Layout

Incompatible API Changes

Incompatible Behavior Changes

Radial Layout

Incompatible API Changes

Incompatible Behavior Changes

Radial Tree Layout

Incompatible API Changes

Incompatible Behavior Changes

Radial Group Layout

Incompatible API Changes

Incompatible Behavior Changes

Series-parallel Layout

Incompatible API Changes

Incompatible Behavior Changes

Compact Disk Layout

Incompatible Behavior Changes

Multi-page Layout

Incompatible API Changes

Partial Layout

Incompatible API Changes

Incompatible Behavior Changes

Tabular Layout

Incompatible API Changes

Incompatible Behavior Changes

  • The TabularLayout now considers node labels by default.
  • The TabularLayout now places edge labels by default using a generic labeling algorithm.

Component Layout

Incompatible API Changes

Incompatible Behavior Changes

Tree Map Layout

Incompatible API Changes

Recursive Group Layout

Incompatible API Changes

Layout Grid

Incompatible API Changes

Other Layouts

Incompatible API Changes

Algorithms

Incompatible API Changes

Analysis

Incompatible API Changes

Collections

Incompatible API Changes

Geometry

Incompatible API Changes