Release Notes
yFiles.NET (WinForms)

Version 6.0.0.2 is the latest release for yFiles.NET (WinForms) in the yFiles.NET 6.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 6.0 have a look at About yFiles.NET (WinForms) version 6.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 6.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.NET 6.0.

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

Major new Feature: Support for Touch and Stylus Input

yFiles.NET now supports touch and stylus devices.

Touch input is now available across all built-in input modes. Numerous new properties enable full customization of input modes for mouse, stylus, and touch interactions.

The new versatile Pointer events replace the previous Mouse2D events. Pointer events support mouse, touch, and stylus inputs, providing generic properties such as event type (e.g., Up or Down) and location, as well as specific details like stylus pressure and touch size.

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

  • Fixed an issue where a sequential animation would break when the preferred duration was set to zero.
  • Fixed GraphOverviewControl rendering issues with HighDPI displays in conjunction with display scaling.
  • Changing CanvasControl.Zoom property value no longer changes the viewport center, if the control's Projection and Scale are set to non-default values.

Rendering

New Features and Improvements

Selection, Focus, Highlight

New Features and Improvements

Styles

New Features and Improvements

Bug Fixes

  • The intersection calculation for RectangleNodeStyle has been corrected for some previously failing edge cases that resulted in edges ending in mid-air or disappearing.
  • The selection, highlighting and focus visualization of edges using BridgeEdgeStyle or ArcEdgeStyle no longer disappears too early if the edge path is only partially in the viewport.
  • The following node styles now consider the pen thickness in the visibility test: ShapeNodeStyle, ArrowNodeStyle, GeneralPathNodeStyle, GroupNodeStyle, and RectangleNodeStyle.
  • LabelStyle's GetPreferredSize now correctly calculates the preferred height for label text consisting of multiple lines of text when some kind of text trimming is used. Previously, the more lines of text there were, the higher the chance was for some lines being cut off, because the calculated height was to small.

Interaction

New Features and Improvements

Bug Fixes

Label Editing

New Features and Improvements

Snapping

New Features and Improvements

Clipboard

New Features and Improvements

  • Members of GraphClipboard and GraphEditorInputMode with Element in their name that actually referred to model items were renamed to Item to clarify their usage.
  • The GraphClipboard.Paste method now accepts an optional pasteLocation parameter specifying the center of the bounds of the pasted items.
  • The events on GraphClipboard now use GraphClipboardEventArgs that provide the current IGraphClipboardContext and the Items.
  • When moving the viewport in a GraphControl that has a projection, the inertia now works in the right direction.
  • GraphClipboard's Cut, Copy, Paste, and Duplicate methods now use an IEnumerable to determine the subgraph to copy.
  • GraphClipboard now uses an optimized ClipboardGraphCopier for its clipboard operations instead of the general GraphCopier.
  • Bug Fixes

    • In certain rare cases, the insertion of edges could end up in an endless loop. This has now been fixed.

    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 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 assigns superfluous space to group nodes if there are grouped edges.
    • The HierarchicalLayout algorithm now correctly handles node and edge labels with width or height set to negative values. Previously, large negative values may have caused exceptions.
    • The HierarchicalLayout class now always places aligned ports correctly in from-sketch mode.
    • Instances of LayerConstraintData and SequenceConstraintData that are configured with comparables can now be reused for multiple layout calculations.
    • 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.
    • IntersectionsResult no longer includes intersections that have no actual intersection points. This issue occurred when two graph elements were within a small epsilon distance of each other.

    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.

    Bug Fixes

    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

    • 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.
    • Edges at the same port are now always automatically port grouped unless port groups have been defined explicitly.

    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

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

    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