Release Notes yFiles.NET (WinForms)
Version 6.0 is the latest major 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 theIReadOnlyList<T>interface. This means that standard collections such asList<T>can now be used there. Accordingly, theListEnumerableExtensionsandListEnumerable<T>classes have been removed. -
The lookup API has been restructured. In particular, the
LookupDecoratorclass 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
LicenseConfigclass 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
-
CompositeLabelModelnow cannot only combine label models but also individual label model parameters or a mix of both kinds. Furthermore, it supports assigning a profit value to a parameter or model that can be used when placing labels during an automatic layout. -
The new
CompositeLabelModel.AddParametermethod wraps a given parameter of one of the composed label models. -
The new
IGraph.GetEdgesBetweenmethod returns all edges between two ports or port owners. -
The methods of
IGraphnow check consistently whether given geometric arguments are neither infinite norNaN. -
The rotation direction of
OrientedRectangle,NodeLabel,EdgeLabelandFreeEdgeLabelModelis now clockwise to be consistent with the other models. - The default placement for new edge labels is now on the middle of the edge path instead of on the first edge segment.
-
The label models
ExteriorLabelModel,InteriorLabelModel, andInteriorStretchLabelModelhave been renamed toExteriorNodeLabelModel,InteriorNodeLabelModel, andStretchNodeLabelModel, respectively, to make it clear that only nodes are supported as label owner for these models. -
The implementations of
ILabelModelParameterandIPortLocationModelParameterused by theILabelModelandIPortLocationModelclasses are now public and provide all properties necessary to recreate them on the models. Consequently, the staticLabelModelParameterSerializerandPortLocationModelParameterSerializerclasses, which could be used to retrieve those properties and recreate the parameter, have been removed. -
The
ILabelModelparameter of theILabelModelParameterFinder.FindBestParameterandILabelModelParameterProvider.GetParametersmethods has been removed as it was only very rarely required. -
The
GraphCopierAPI has been enhanced to offer improved clarity and functionality.-
The
GraphCopierhas been optimized since its support for theGraphClipboardhas been removed. -
The
GraphCopier.Copymethod now uses anIEnumerableof items to define the subset to copy.
-
The
-
The
SimpleNode,SimpleEdge,SimpleBend,SimpleLabel, andSimplePortclasses now provide a convenienceLookupDecoratorinstance through theGetDecoratormethod. -
The
ILabelModel.CreateDefaultParametermethod and most of its implementations have been removed as it was often unclear what βdefaultβ meant. Most label models already had a correspondingCreate*Parametermethod. For the remaining models, theGroupNodeLabelModel.CreateTabParametermethod and theFreeNodeLabelModel.CenterandFreePortLabelModel.Centerfields have been added. -
The structural properties on graph items now are never
null. This affectsIEdge.SourcePort,IEdge.TargetPort,ILabel.Owner,IPort.Owner, andIBend.Owner. -
The
IGraph.GroupNodesmethod now has optional parameters that specify theStyleandTagof the newly created group. -
The static parameter fields of
FreeNodePortLocationModelhave been renamed analogue to the static parameter fields inInteriorNodeLabelModel. -
FilteredGraphWrappernow supports changing the node and edge predicates after creation. -
The
PropertyChangedevent on theUndoEngineclass is now also emitted if the token is changed.
Bug Fixes
-
Fixed
ILabelOwner.Labels.ContainsandIPortOwner.Ports.Containsimplementations. Previously, these methods returned true for all labels/ports in the owner's graph instead of only for labels/ports belonging to the owner. -
Fixed a bug in
EdgeSegmentLabelModelandEdgePathLabelModelwhich caused a gap in supported positions close to the source and target node. -
Fixed
EdgeSegmentLabelModelandSmartEdgeLabelModellabel placement at source and target nodes when using indices less than 0 or greater than the number of bends in the edge. -
The
EdgeSegmentLabelModelclass now calculates valid label locations for selfloop paths with one port at the side of the node. -
The
EdgeSegmentLabelModelclass now calculates valid label locations for paths with duplicate bends, i.e., paths in which two or more consecutive bends have the same location. -
GraphClipboard'sParentNodeDetectionnow can useParentNodeDetectionModes.Noneas fallback if no valid parent is found for modesParentNodeDetectionModes.SelectionorParentNodeDetectionModes.PreviousParent.
Controls
New Features and Improvements
-
yFiles now offers theming. Therefore, a new
Themeclass has been added.- The new class provides the following properties to determine the overall visual appearance:
-
*
PrimaryBrush,SecondaryBrush, andBackgroundBrushwhich determine the color of vaious decorations like selection decoration or handles. -
*
Scale: which determines the size if handles and port candidates. -
*
IndicatorOffsetandHandleOffset: which determines an offset for decorations to their decorated elements. -
*
Variant: which determines some aspects of the overall appearance, e.g. whether handles should be drawn as circles or squares. -
The theme can be set for a
CanvasControlorGraphControlusing theThemeproperty.
-
CanvasControlandGraphControlnow have a new scroll bar design, as well as new behavior if eitherHorizontalScrollBarPolicyorVerticalScrollBarPolicyis set toAsNeeded. The new style is similar to system scrollbars in many operating systems, overlays the content and gets out of the way when not needed or interacted with. If this behavior is wanted when customizing the control template, the newDynamicScrollBarclass can be used. -
ViewportLimiternow also works with isometric projections and offers options to use theCanvasControl.ContentBoundsfor the limiting. It now offers the possibility to specify margins in the view coordinate system around the specified bounds, and bounds can be given as a list of convex polygon points.CanvasControlnow also notifies the viewport limiter when the size of theContentBoundsor the size of theCanvasControlchanges. -
The new
CanvasControl.HorizontalScrollEventRecognizerproperty allows customizing switching from vertical to horizontal scrolling. -
The
ICanvasContext.CanvasControlproperty (and consequentlyIRenderContextandIInputModeContext) is now guaranteed to have a non-nullvalue. -
All predefined
EventRecognizerconstants can now be found in the same class,EventRecognizers, which improves discoverability. In addition, their names now follow the platform conventions, i.e. they are formulated in the present tense and use the same wording as corresponding input events.
Similarly, the events onCanvasControlwhich are related to input devices now have the same consistent names. -
The
CanvasControl.ContentRectproperty is now namedContentBoundsto make its purpose more clear. TheUpdateContentRectmethod has been renamed likewise. -
It is now possible to have more than one
BridgeManager. This allows you to have different types of bridges on different types of edges. -
GraphControlnow usesGraphViewerInputModeas the defaultInputModefor basic graph exploration.
Bug Fixes
- Fixed an issue where a sequential animation would break when the preferred duration was set to zero.
-
Fixed
GraphOverviewControlrendering issues withHighDPIdisplays in conjunction with display scaling. -
Changing
CanvasControl.Zoomproperty 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
-
The new
ObjectRendererBaseclass allows conveniently implementing theIObjectRendererinterface. -
New classes formalize the data passed as
RenderTagto implementations ofIObjectRenderer.-
The new
PortCandidateRenderTagclass will be passed as render tag for port candidates. -
The new
MarqueeRenderTagclass will be passed as render tag for the marquee rectangle renderer of theMarqueeSelectionInputModeclass. -
The new
LassoRenderTagclass will be passed as render tag for the lasso path renderer of theLassoSelectionInputModeclass. The newLassoPathStateenum defines the current state of the lasso selection path in this class. -
The new
LabelCandidateRenderTagclass will be passed as render tag to the label candidate renderer of theLabelPositionHandler.
-
The new
-
The new
VoidObjectRenderer.Instanceconstant provides a singleton renderer that renders nothing. -
Added properties
IntermediateToWorldTransformandViewToWorldTransformtoIRenderContext. - Hatch brushes are scaled on high-resolution displays.
Selection, Focus, Highlight
New Features and Improvements
-
The new
Domainproperty on theHighlightIndicatorManagerclass matches theDomainproperty on theSelectionIndicatorManagerclass and allows automatic removal of highlights no longer present in the domain. -
FocusIndicatorManagersupports a new policy that will only show the keyboard focus indicator, when the user is actually using the keyboard to manipulate the focus.
Styles
New Features and Improvements
-
New styles that are based on the composition design pattern make it easier to combine existing styles into a single
item visualization. These styles are available for all graph items via the
CompositeNodeStyle,CompositeEdgeStyle,CompositeLabelStyle, andCompositePortStyleclasses. -
Similarly, new styles that are based on the delegation design pattern make it easier to implement custom styles that
extend an existing style. For this, derive your style implementation from the
DelegatingNodeStyle,DelegatingEdgeStyle,DelegatingLabelStyle, orDelegatingPortStyleclass. -
The new
ShapePortStyleclass displays ports as geometric shapes and supports the same shapes as theShapeNodeStyleclass. -
The
Arrowclass now supports more types and features. In particular:-
There are three new shapes that are similar to what is available in common drawing apps:
ArrowType.Chevron,ArrowType.Deltoid, andArrowType.Kite. - The width and height can now be scaled independently from each other.
-
An arrow can now specify whether the end of the edge the arrow belongs to should be cropped at the port or at
the boundary of the port's owner. This alleviates the need to use
PortDecorator.EdgePathCropperfor this.
-
There are three new shapes that are similar to what is available in common drawing apps:
-
The new
PathEdgeStyleBaseclass simplifies using a complexGeneralPathas the edge path of a style. Subclasses only have to create the path while the style already handles the visualization, including placing arrows and bridges. Several callback methods can be overridden to customize the behavior. -
The
ShapeNodeStyleclass now supports more shapes, namelyPentagon,OctagonStanding,TrianglePointingLeft, andTrianglePointingRight. These shapes are also available asTextWrappingShape. -
Node shapes that are stars or arbitrary polygons are now easy to implement with new factory methods of the
GeneralPathNodeStyleclass. -
LabelStylenow trims text (and shows ellipsis) when text wrapping and text trimming is used with rectangle shapes. Previously,DefaultLabelStyleused Forms' native support for trimming and wrapping for rectangle shapes which could lead to clipped text. -
LabelStylenow trims large text at words, with an ellipsis by default. -
LabelSTylenow only includes entire lines in its bounds by default. -
The
IconLabelStylenow has a default icon size of 24x24 instead of empty, such that the icon is always visible. -
The new
GetLassoTestablemethod of the interfacesINodeStyleRenderer,IEdgeStyleRenderer,ILabelStyleRenderer, andIPortStyleRendereris similar to the existingGetMarqueeTestablemethod, so marquee and lasso selection do no longer differ in the ways the testable is retrieved. -
The
CollapsibleNodeStyleDecoratorclass positions and styles the button now closer to whatGroupNodeStyledoes to achieve a more modern look. -
Group nodes and nodes with
GroupNodeStylenow have more useful default port candidates. Either four candidates, one in each cardinal direction, for group nodes withGroupNodeStyle. Or a single central port for folder nodes with aGroupNodeStyle. -
ShapeNodeStylenow considers the pen thickness when rendering rectangle, round rectangle and ellipse shapes, i.e. the pen is rendered half inside and half outside the node bounds, like for the other shapes.
Bug Fixes
-
The intersection calculation for
RectangleNodeStylehas 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
BridgeEdgeStyleorArcEdgeStyleno 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, andRectangleNodeStyle. -
LabelStyle'sGetPreferredSizenow 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
-
The
MoveInputModeclass now also handles moving labels, thus theMoveLabelInputModehas been removed. -
The new
PointerLongPressevent is available for all pointer input types and replaces the previous touch-specific long press API. -
The new
PointerLongRestevent is raised when the pointer stays still for a configurable amount of time during a move or drag gesture. -
All events of an
IInputModewhich report creation of, changes to, or deletion of model items now have arguments of typeInputModeItemEventArgsorInputModeItemChangedEventArgs. This type provides the affected item and theIInputModeContextfor the involved input mode. -
The keys to modify the gestures of various input modes have been adjusted to better match those of other often used
applications:
-
To temporarily disable snapping during edge creation, moving, or resizing items, the
Altkey can now be pressed instead of theCtrlkey. -
When resizing a node using its reshape handles, the
Ctrlkey instead of theAltkey can be pressed to keep the center of the reshaped node. -
To reparent a node to another parent during a drag gesture, the
Ctrlkey has to be pressed instead of theShiftkey.
-
To temporarily disable snapping during edge creation, moving, or resizing items, the
- Elements can now be moved without selecting them first.
-
The new
CreateEdgeInputMode.MinimumSelfLoopBendCountproperty allows for specifying the number of bends an edge must at least have before it can be created as selfloop. -
The new
CreateEdgeInputMode.ShowStartPortCandidateDelayproperty allows for specifying a delay after which start port candidates are displayed when the user hovers over a start port candidate owner. -
The new
GraphEditorInputMode.MovableUnselectedItemsproperty allows for defining items which can be moved without selecting them first. TheMovableUnselectedItemsPredicateproperty can be used for closer specification. -
The
CanvasControl's event system is now based on thePointerEventAPI instead of mouse and touch events. This enables to support stylus devices and allows for handling different input devices in a more uniform way. -
The new
CreateEdgeInputMode.EdgeDirectionReversedevent and the newCreateEdgeInputMode.OnEdgeDirectionReversedmethod are triggered when the direction of the edge creation changed during edge creation. -
The event
ItemsCopiedonGraphViewerInputModeand the eventsItemsCopied,ItemsCut,ItemsPasted,ItemsDuplicated, andDeletedSelectiononGraphEditorInputModenow useItemsEventArgsproviding the items that are the subjects of the events. -
The new
GraphEditorInputMode.SetNodeLocationmethod uses theIPositionHandlerof a node to change its location, and this way also adjusts the attached orthogonal edges and the position of child nodes if the given node is a group node. - Reconnecting edges to other nodes is now allowed per default.
-
The
IHitTesterinterface has been changed to support faster hit testing. The generic type has been removed. Instead, aGraphItemTypesparameter has been added that is used to reduce hit tests to the specified item types. -
The new
HandleType.Voidenum value makes a handle invisible and excludes it from hit testing. -
The new
GraphEditorInputMode.CreationSelectableItemsproperty allows you to specifyGraphItemTypeswhich should be selected after creation. -
Moving items interactively now supports constraining the move gesture to an octilinear direction. This constraint is
used when pressing the
Shiftkey while dragging the items. -
Marquee and lasso selection have been enhanced to support multiple selection policies. While the default gestures
replaces the selection, pressing the
Ctrl,Shift, orAltmodifier during the gestures extends, subtracts or toggles the current selection with the elements in the marquee or lasse area. -
Edge creation now supports constraining the current edge segment to use an octilinear direction. This constraint is
used when pressing the
Shiftkey while dragging the pointer. -
The
PointerEventArgs.Handledproperty has been added that can be used to set and detect if another listener already handled the event. -
A
SnapResult.Penproperty has been added that can be used to suggest a custom pen to theSnapResult.ObjectRenderer. -
The
IncreaseZoomandDecreaseZoomcommands now also supportPointandPointFas parameter. -
Renamed
GraphEditorInputModeHandleClickHandlermethod toHandleClickListenerto match the name of theIClickListenerinterface. -
If a
Wheelevent is handled by code, the default behavior (zoom/scroll) will be cancelled. -
Commands handled by
yFiles.NETcan now be executed on aGraphControlusing corresponding constants from the Command enum.GraphControlprovides methods such asExecuteCommandandCanExecuteCommand, along with theCanExecuteCommandChangedevent, for this purpose. This presents an additional execution pathway while retaining the ability to use the original commands as usual. -
KeyboardInputMode's methodsAddCommandBinding,AddRecognizerBinding, andAddKeyBindingnow return a token which can be used to remove that binding. -
The
IInputModeAPI has been updated for clarity: theInputModeproperty has been removed from the interface. Instead, most implementations now offer the protectedParentInputModeContextproperty to clearly indicate its role as the input mode's parent context. Most input modes can create a context which can be passed to dependents via the protectedCreateInputModeContextmethod. The created context has the input mode set as the parent input mode. The newInputModeContextclass may be used by implementations to conveniently create new contexts. -
When using the
GraphViewerInputMode, the viewport can now be moved by either dragging with the left or middle mouse button. -
When using the
GraphEditorInputMode, the viewport can now be moved by either dragging with the middle mouse button or by dragging with the left mouse button when pressing theCtrlorSpacekey. -
Several default keyboard shortcuts have been adjusted to more widely used ones:
-
Ctrl+0orAlt+0sets the zoom to 100%. -
Alt+1fits the content in the view. -
Alt+2brings the selection into the view. -
Alt+3brings the current item into the view. -
Ctrl+Plusincreases the zoom value. -
Ctrl+Minusdecreases the zoom value. -
Alt+Leftcollapses a selected group node. -
Alt+Rightexpands a selected folder node. -
Alt+Upexits the current folder node. -
Alt+Downenters the current folder node. -
Alt+Shift+LeftorAlt+Shift+Righttoggles the expansion state of a selected group or folder node.
-
-
The new
Command.ZoomToSelectionzooms to the bounding box around all selected items. It can be triggered by the keyboard short cutAlt+2. -
Lowered the
MoveViewportInputMode.Priorityto105to make viewport panning withCTRLorSPACEmodifiers easier in dense graphs. -
The new
DropInputMode.AcceptDragmethod is called onDragEnteredevents and determines if the mode will handle subsequent drag and drop events. Previously, this was the responsibility of theDropInputMode.AdjustEffectmethod . Now,AdjustEffectonly changes the drag/drop effect of the given event args as its name implies. - Edge creation can now be cancelled by ending the gesture over the source node.
-
Edge creation is canceled if the
GraphControlloses the focus. -
GraphViewerInputMode's andGraphEditorInputMode'sClickHitTestOrdernow reflects the z-Order of the elements. By enablingSkipHitLabels(the default) elements behind labels can still be prioritized over the labels. -
LabelDropInputModenow consults theIEditLabelHelperof possible drop targets when dragging and dropping labels. -
Command handling has been improved: The previous
ICommand, inspired by WPF's commands, has been replaced with an enumeration of primary input gestures calledCommand.GraphControlnow manages the execution of commands:-
GraphControl.ExecuteCommandruns the specified command with an optional parameter. -
GraphControl.CanExecuteCommandindicates whether the specified command can be executed. -
The
CanExecuteCommandChangedevent is triggered when the executable state of a command has changed.
-
-
OverviewInputModenow uses theCanvasControl'sMouseWheelZoomEventRecognizerto determine if the used performed a zoom gesture. -
GraphEditorInputModenow allows for starting label editing just by starting to type. TheAllowEditLabelOnTypingproperty can be used to configure this setting, which is turned on, by default. - The default gesture for label editing has been updated to also trigger when the user hits the `Enter` key.
-
The
ClickInputMode.Clickedevent is now raised also for double-clicks and multi-clicks. Clicking multiple times in the same location increments theClickEventArgs.ClickCountby one for each click. -
The
HandleIsHitandGetClosestHitHandlemethods ofHandleInputModenow have an additional parameter which specifies thePointerTypeof the related user gesture. -
MoveViewportInputModenow gracefully handles concurrent programmatic viewport modifications. - Starting edge-creation from a child node inside a group node now does not immediately snap to the parent when moving over the group nodes content. Instead, it only snaps to the closest port when hovering the tab or stroke.
-
The sub-input modes of
GraphViewerInputModeandGraphEditorInputModecan now be replaced while the input mode is installed. -
The new
GraphViewerInputMode.HitTesterproperty works in the same way as theGraphEditorInputMode.HitTesterproperty. -
The
GraphEditorInputMode.DuplicateSelectionmethod now also dispatchesMultiSelectionStartedandMultiSelectionFinishedevents. -
NavigationInputModenow interprets the direction of arrow keys in view coordinates by default. Previously the default settings could lead to surprising behavior when combined with aProjectiononGraphControl. -
The
GraphInputMode.FindItemsmethod now considers the actual z-order of the hit items. -
The
GraphInputMode.ItemClickedevent and the cyclic selection now consider the actual z-order of the hit items at the cursor location. Bends and invisible ports are now properly taken into account and hit before their owners. -
The rendering order of visuals created by an
InputModenow corresponds to the input mode'sPriority. In other words, visualizations of input modes with a smaller priority value (= higher priority) are drawn on top. -
The
GraphEditorInputMode.OrthogonalEdgeEditingContextproperty is now set and enabled per default and may not benullanymore. Edges can be individually configured to be edited orthogonally by providing an apropriateIOrthogonalEdgeHelperin their lookup.-
For edges using a
PolylineEdgeStyle, the style's newOrthogonalEditingproperty can be set so such a helper is automatically provided. -
To disable orthogonal editing for all edges, the
Enabledproperty of theOrthogonalEdgeEditingContextcan be set to false. -
To enable orthogonal edge editing for all edges that don't explicitly forbid this, the
OrthogonalEdgeEditingContext.FallbackEdgeHelperProviderproperty can be set to a helper supporting orthogonal edge editing.
-
For edges using a
-
The
HandleTypesenums has been refactored to a non-flaggableHandleTypeenum, and the values have been adjusted to those used in the library as well as some custom variants for individual use. -
Custom
IHandleimplementations can use the newIHandle.Tagproperty for various purposes, including custom handle visualizations. yFiles does not use the property and initializes it withnull, but decorating handles forwards any values unmodified. -
The static member
GraphClipboard.DefaultGraphClipboardhas been added and is used per default asGraphControl.Clipboard. This way copy&paste operations work between multipleGraphControlinstances without the need to set a sharedGraphClipboardinstance first. -
The parent node detection of
GraphClipboardhas been streamlined. -
The protected
Should-methods of the input modes have been removed and replaced by predicate properties. This simplifies adjusting the behavior without the need to subclass the input modes. -
Toggling the item selection via
Ctrl+Spacenow prefers toggling the selection state ofGraphControl.CurrentItemover deselecting a single selected item. -
The items reported by the
HandleInputMode.AffectedItemsproperty now include edges that were modified with the height handle ofBezierEdgeStyleandArcEdgeStyle. -
New overloads of the
CreateEdgeInputMode.StartEdgeCreationmethod can be used to start interactive edge creation from a node or port, respectively. -
The modifier for using the
ILabelModelParameterFinderduring label movement can now be changed with theLabelPositionHandler.UseParameterFinderRecognizerproperty. - Improved keyboard navigation for graph items.
-
The
MoveInputModeandMoveUnselectedInputModeproperties ofGraphEditorInputModehave been renamed toMoveSelectedItemsInputModeandMoveUnselectedItemsInputModeto better describe what they are used for. Associated properties and methods have been renamed accordingly. - Dragging a selected edge doesn't move all its bends anymore which often screwed up the first and last edge segment.
-
The
MouseHoverInputModehas been renamed toToolTipInputModeto better reflect its function.
Bug Fixes
-
Fixed a possible exception upon
ClickInputModeinstallation if theDoubleClickTimewas set to 0. -
Fixed a bug in
TextEditorInputModewhich prevented setting a customTextBoxvia property. - Sporadic errors during pinch zoom have been corrected.
-
Toggling the selection of an item using the keyboard now always toggles the selection of the focused item.
Previously, if exactly one other item was selected when toggling, that item was deselected, making it virtually
impossible to select multiple individual items using the keyboard.
To fix this, the behavior ofGraphCommands.ToggleItemSelectionhas been adjusted accordingly, and the behavior theGraphCommands.SelectItemandGraphCommands.DeselectItemhas also been changed accordingly. -
NavigationInputModenow reliably brings items selected with keyboard navigation into the view. Previously this only worked for nodes. - Fixed an issue where keyboard navigation would stop working when two items were positioned at the same location.
-
The
GraphInputMode.FindItemsoverload without thecontextparameter did not find items correctly. -
Several members of
EditLabelInputModecould not be overwritten by mistake. TheInstall,Uninstall,TryStop, andCancelmethods and theEnabledproperty can now be overwritten. -
GraphInputMode.FindItemsmethod: when the filter includes both edges and bends, the edge will no longer be ignored if any of its bends are hit. -
GraphInputMode.FindItemsmethod: when usingGraphItemTypes.All, bends will not be ignored. Furthermore, the interfacesIBendSelectionTesterandIPortSelectionTesterare properly queried. -
GraphInputMode.FindItemsmethod: Ports with a style are no longer reported twice. -
When moving the viewport in a
GraphControlthat has a projection, the inertia now works in the right direction. -
Fixed that the
MarqueeSelectandLassoSelectmethods ofGraphEditorInputModeandGraphViewerInputModewere called with a wrong input mode context. - Fixed occasionally missing auto-scrolling on viewport bounds for touch devices.
- Key presses are no longer propagated to the canvas's parent control if an input mode requests the keyboard.
Label Editing
New Features and Improvements
-
The API related to label editing has been enhanced by introducing a new
EditLabelInputMode, which is now a subordinate mode ofGraphEditorInputMode. The new input mode consolidates the methods, properties, and events necessary for customizing label editing. The key methods,AddLabelandEditLabel, remain accessible throughGraphEditorInputMode. - The text editor will now stay open by default if label text validation fails.
-
Each
ILabelandILabelOwnernow includes a default implementation ofIEditLabelHelperin itsLookup. TheIEditLabelHelperinterface has been updated to offer greater control over the label editing process. -
The API related to label editing has been removed from
TableEditorInputMode, except for the key methodsAddLabelandEditLabel. Label editing is now handled throughGraphEditorInputMode'sEditLabelInputMode.
Snapping
New Features and Improvements
- The snapping feature has been refactored and enhanced to support more use cases. Previously, items could only snap to points or orthogonal lines. Now lines with any orientation and circle segments can be defined as references where items can snap to. Furthermore:
-
Snapping to circles, grids, and specific node sizes has been refactored to work analogue to the snapping to a
SnapLine, soSnapCircle,SnapGrid, andSnapSizeinstances are created and are available for theSnapResultproviders. -
Label snapping is now also handled by the
GraphSnapContext, so theLabelSnapContexthas been removed. Configuration options have been moved fromLabelSnapContexttoGraphSnapContext. -
Additional improvements:
-
The new
GraphSnapContext.AffectedItemsproperty provides the items for whichSnapResultsshall be collected. -
The configuration options of
GraphSnapContextare now easier to use and more concise. -
The new protected methods
CollectGridSnapReferencesandCollectSameSizeSnapReferencesofGraphSnapContextcan be overridden to customize theSnapGridandSnapSizeinstances items can snap to. -
The new
SnapReferenceclass is now the base class ofSnapLine, and the newSnapGrid,SnapSize, andSnapCircleclasses. The newSnapReference.SnappableItemsproperty describes which item types may snap to this reference. - Snap references of all types can be styled with CSS classes.
-
The new
OrthogonalSnapLine.Croppableproperty is used to decide which snap lines to crop ifGraphSnapContext.CropSnapLinesis {}true{}. -
The new properties
Reference,Item, andItemAnchorof theSnapResultclass can be used by theIObjectRendererfor the visualization of theSnapResult. -
New methods of
ReshapeRectangleContextsimplify the calculation of the bounds for a specified pointer delta or theSnapConstraintnecessary to result in a specified width, height or side location.
-
The new
Clipboard
New Features and Improvements
GraphClipboard and GraphEditorInputMode with
Element in their name that actually referred to model items were renamed to
Item to clarify their usage.
GraphClipboard.Paste method now accepts an optional pasteLocation
parameter specifying the center of the bounds of the pasted items.
GraphClipboard now use GraphClipboardEventArgs that provide the current IGraphClipboardContext and the Items.
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,
UpdateGroupNodeStateandUpdateMasterEdges, have been added toIFolderNodeConverterandIFoldingEdgeConverter, 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
GraphClipboardif 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
FolderNodeConverterif labels are copied between master and view node.
View-Layout-Bridge
New Features and Improvements
-
LayoutExecutorcan now automatically create port constraints for edges at ports that use aCompositePortLocationModel. For all parameters added to aCompositePortLocationModel, a fixed port candidate is created. The cost, capacity, andPortSideof this candidate can be specified when adding the parameter to the model. -
With the new
ItemMapping.Dictionaryproperty, a dictionary can be used to specify anItemMapping. -
The
LayoutExecutor.TableLayoutConfiguratorfeature now uses more flexible placements for nodes that don't belong to any table node.
Bug Fixes
-
The
LayoutExecutorandLayoutGraphAdapterclasses 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
-
LayoutPortCandidates now have aMatchingId. When finding matchingLayoutPortCandidates at nodes and for edges, twoLayoutPortCandidates can only match if theirMatchingIdproperties are equal. -
The
LayoutAnchoringStageclass (previously calledFixNodeLayoutStage) now allows using not only nodes but also edges and labels to anchor the graph's position.-
The new
NodeAnchoringPolicies,EdgeAnchoringPolicies,NodeLabelAnchoringPoliciesandEdgeLabelAnchoringPoliciesproperties specify which part of the items should be used to calculate the anchor point. -
The new
LayoutExecutor.AnchoredItemsproperty specifies the graph items used to anchor the graph's position.
-
The new
-
The
ComponentLayouthas now the ability to specify which layout to apply to individual components usingComponentLayoutData.ComponentLayoutsproperty. Additionally, edges between components can be routed using a router set viaComponentLayout.InterEdgeRouter. -
It is now possible to specify multiple layout grids for a graph (previously called
PartitionGrid). This is made possible by the newLayoutGridCellDescriptor.LayoutGridproperty. This way it is no more required to set the global layout grid with theLayoutGridData.Gridproperty. If a node is to be placed in a grid but not in a specific cell, this can now be achieved using the newLayoutGrid.CreateDynamicCellDescriptormethod. Be aware that many layout algorithms likeHierarchicalLayoutdon't support multiple layout grids. -
The
LayoutDataclasses are now generic and can be used for items of aLayoutGraph, too. Of course, it's still possible to useLayoutDatawithIGraphitems.-
LayoutDatainstances when used withIGraphtypically needINode,IEdge,ILabel, andILabelas their type arguments. -
LayoutDatainstances when used withLayoutGraphtypically need Node, Edge,NodeLabel, andEdgeLabelas their type arguments. -
Instances of
LayoutDataclasses can be created via factory extension methods on the layout algorithm themselves, for example,HierarchicalLayout.CreateLayoutData. Depending on the type of graph that is provided as the argument, the correct data instance will be created.
-
-
The API around the
LayoutGraphclass has received a major rework. TheLayoutGraphis the only remaining graph implementation for the layout analysis part. ClassesGraph(previously used for graph analysis, only) andCopiedLayoutGraphhave been removed and functionality was moved toLayoutGraph.-
The API has been made more similar to the API of the
IGraphwith respect to creation, modification and access to nodes, edges and labels. -
Low-level data types like
NodeListandEdgeListhave been removed as well as cursor for iteration over the elements. -
Properties
NodeCountandEdgeCounthave been removed. Query the size of theNodesandEdgesproperties instead. -
Layout information about items must no longer be queried from the graph instance (e.g. previously with methods
like
LayoutGraph.GetLayout). It is now accessible on the items itself and is also mutable, seeNode.Layoutproperty. -
The edge path information is no defined by properties on the edge, most importantly these are
SourcePortLocation,TargetPortLocationandBends. -
Labels of nodes and edges are now accessed via a property on the respective owning item. To add labels, use
LayoutGraph.AddLabelmethod. The complicatedILabelLayoutFactorythat covered that use case in the past has been removed. -
Hiding items is no longer possible via the graph itself. To do so, use the helper
LayoutGraphHiderclass. -
The
Graph.ContainsEdgemethod has been removed in favor ofLayoutGraph.GetEdgesBetween. The same holds for theNode.GetEdgeToandNode.GetEdgeFrommethods. -
Convenience properties like
Node.Neighborshave been removed. Instead, query all edges (using the Edges property) and filter the required adjacent nodes manually. -
To copy a
LayoutGraphinstance, the newLayoutGraph.CreateCopymethod has been added. -
If a
LayoutGraphwithout coordinate/path information is needed (to optimize memory performance), it can be created using the factoryLayoutGraph.CreateStructureGraphmethod.
-
The API has been made more similar to the API of the
-
LayoutExecutornow supports arranging graphs without aGraphControl. -
The thread started when
LayoutExecutor.RunInThreadistrueis now a background thread and thus long-running layout calculations no longer block the process from exiting. -
The new
LayoutGraph.GetEdgesBetweenmethod returns all edges between two nodes. -
The
PortPlacementStagenow computes cost-minimal matchings between port candidates at nodes and edges. -
Most layouts now support port grouping and port candidates at nodes and edges. These features are implemented
through a post-processing step using the
PortPlacementStage, rather than being natively integrated into the layouts. As a result, the quality may be poor.
Bug Fixes
-
The
CurveFittingStagenow correctly respects the maximum error. Previously, it sometimes produced curves that violated the maximum error. -
The
LineSegment.GetIntersectionmethod no longer produces incorrect results when the specified epsilon is zero. Previously, there were some edge cases where the algorithm failed to detect an intersection and returnednullinstead. -
Added the protected
ParallelEdgeRouter.HideMultiEdgesmethod, which is required to meaningfully overwrite the existing protectedParallelEdgeRouter.FindAndHideMultiEdgesmethod. -
The
PortPlacementStagenow correctly considers port candidates together with port groups.
Hierarchical Layout
New Features and Improvements
-
The
HierarchicalLayoutclass now supports defining minimum distances between the ports. They can be specified per node side using theHierarchicalLayoutNodeDescriptor.MinimumPortDistanceproperty. 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.SourcePortAlignmentIdsandPortData.TargetPortAlignmentIdsaccessible viaHierarchicalLayoutData.Ports. -
The
HierarchicalLayoutnow produces fewer bends for multi-edges with labels when integrated edge labeling is enabled. -
The
HierarchicalLayoutclass 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
HierarchicalLayoutno 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
HierarchicalLayoutnow enforces a more symmetric placement of the nodes that are part of chains or height-2 trees.
Bug Fixes
-
The
HierarchicalLayoutclass no longer produces an error when using a non-zero grid distance in combination with incremental mode's exact coordinate hints. -
The
HierarchicalLayoutclass no longer assigns superfluous space to group nodes if there are grouped edges. -
The
HierarchicalLayoutalgorithm now correctly handles node and edge labels with width or height set to negative values. Previously, large negative values may have caused exceptions. -
The
HierarchicalLayoutclass now always places aligned ports correctly in from-sketch mode. -
Instances of
LayerConstraintDataandSequenceConstraintDatathat are configured with comparables can now be reused for multiple layout calculations. -
The
HierarchicalLayoutclass no longer produces an error for labeled graphs with port alignment constraints when the integrated edge label placement is enabled. -
The
HierarchicalLayoutclass no longer produces superfluous crossings between backloops or same-layer edges in the first or last layer. -
The
HierarchicalLayoutnow 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 theLayoutGraphinstance when running the layout algorithm directly on the graph instance without using a copy. -
The
HierarchicalLayoutclass no longer swaps the position of fixed nodes in incremental layout mode with user-specified sequence constraints. -
The
HierarchicalLayoutclass 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
HierarchicalLayoutclass no longer produces very long edge segments for some input graphs containing groups with node halos and polyline edge routing. -
The
HierarchicalLayoutclass 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
HierarchicalLayoutclass no longer produces intertwined edge routes with many superfluous crossings and bends for some cases with sequence constraintsPlaceAtHeadorPlaceAtTail. The problem mainly occurred with graphs with groups orPartitionGridand incompatible sequence constraints.
Tree Layout
New Features and Improvements
-
Added the new
TreeLayout.FromSketchModeproperty to consider the initial coordinates of the graph elements. This has an effect only if the used subtree placers implementIFromSketchSubtreePlacer. -
Added the
TreeLayoutData.MultiParentDescriptorsproperty that allows to specify style information for multi-parent structures. -
The
TreeReductionStageDataclass now offersNonTreeEdgesResultproperty. It allows to conveniently query the set of edges that the stage actually selected as non-tree edges. -
The
TreeLayoutnow considers minimum last segment lengths no matter on which side the port shall be placed. -
The
AspectRatioSubtreePlacernow supports minimum first and last segment lengths. -
The
SingleLayerSubtreePlacersupports placing the subtree root centered with respect to the ports at its children with the new enum valueSingleLayerSubtreePlacerRootAlignment.CenterOfPorts. -
All subtree placers that used
Tree.RootAlignmentsupport placing the subtree root centered above the ports with the new valueCenterOfPorts. -
The
LeftRightSubtreePlacernow supports minimum segment length, which can be set with the propertiesMinimumFirstSegmentLengthandMinimumLastSegmentLength. -
The
AspectRatioSubtreePlacernow supports multiple variants how to place the root node with respect to its children, which can be set using the propertiesChildArrangementandRootPlacement. -
Added properties of
TreeReductionStageDatadirectly to theLayoutDataof tree layouts, includingRadialLayoutData,AspectRatioTreeLayoutData,RadialTreeLayoutData, andTreeLayoutData.
Bug Fixes
-
The
TreeLayoutclass no longer ignores the initial locations for some subtree placers if theFromSketchModeproperty is enabled. -
The Tree Layout now automatically places edge labels of the parallel edges handled by its
ParallelEdgeRouterinstance, when integrated edge labeling is enabled. -
The
TreeLayoutclass no longer produces broken edge routes for some input graphs with multi-parent structures. -
The
AspectRatioSubtreePlacerclass no longer ignores the specifiedAspectRatioSubtreePlacer.ChildAlignmentPolicyfor some specific setups (e.g., if all children are leaves and have the same size).
Orthogonal Layout
New Features and Improvements
-
The newly added
OrthogonalLayout.QualityTimeRatioproperty allows controlling the layout quality by automatically enabling/disabling additional optimization steps. -
The
OrthogonalLayoutalgorithm now supports specifying edges that should be routed against the main layout orientation in addition to the option to route with the main layout orientation. SeeOrthogonalLayoutData.EdgeOrientationproperty.
Bug Fixes
-
The Orthogonal Layout now automatically places edge labels of the parallel edges handled by its
ParallelEdgeRouterinstance, when integrated edge labeling is enabled.
Edge Router
New Features and Improvements
- The quality of edge routing for buses is improved.
-
If
EdgeRouteris 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
EdgeRouternow prefers to use fixed port candidates that are not overlapped by other nodes. -
The
EdgeRouterclass 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
-
The
GenericLabelingalgorithm now correctly considers the case where model parameters of aCompositeLabelModelhave different weight values. Higher weights are preferred. -
The
EdgeLabelCandidates.BuildCandidatesmethod does no longer returnnullfor some setups with free edge label models. Instead it returns an emptyIEnumerablenow. -
The
GenericLabelingclass now produces less node-label overlaps.
Organic Layout
New Features and Improvements
-
The performance for the
OrganicLayouthas 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
OrganicLayoutnow supports different styles for group substructures, which are set via theGroupSubstructureStyleproperty.
Bug Fixes
-
The Organic Layout now automatically places edge labels of the parallel edges handled by its
ParallelEdgeRouterinstance, when integrated edge labeling is enabled. -
The
OrganicLayoutclass 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
-
Added data key
OutEdgeComparisonDataKeytoRadialTreeLayoutclass (formerlyBalloonLayout).
Series-parallel Layout
Bug Fixes
-
The Series Parallel Layout now automatically places edge labels of the parallel edges handled by its
ParallelEdgeRouterinstance, when integrated edge labeling is enabled.
Partial Layout
New Features and Improvements
-
PartialLayoutnow supports specifying inversely directed edges in addition to undirected and directed edges.
Bug Fixes
-
PartialLayoutScopeDatawill 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
-
The new
TabularLayoutData.LayoutGridDataproperty makes it easy to query the cell to which a node was assigned to by theTabularLayoutclass after applying it.
Bug Fixes
-
The layout algorithms do no longer throw an Exception when a
LayoutGridincluding a mapping from nodes toLayoutGridCellDescriptorsis defined and if algorithmTabularLayoutwas executed before withLayoutModeAutoSizeorFromSketch. In these modes theTabularLayoutautomatically assigns cells to nodes so that any mapping defined prior will be ignored now.
Component Layout
New Features and Improvements
-
ComponentLayoutnow supportsNodeMargins(formerlyNodeHalos) for eachComponentArrangementStyleother thanNoneandKeepCenters.
Algorithms
New Features and Improvements
-
The
LongestPathalgorithm now uses double values instead of integers for edge traversal costs. This improves thePaths,LayoutGraphAlgorithms, andLongestPathclasses. -
The
LayoutGraphAlgorithms.FindCycleEdgesmethod has been improved and now requires fewer edges to be reversed. In addition, a new, even better but slower heuristic can be enabled with a new optional parameter.
Bug Fixes
-
The
Intersectionsclass does not disposeFilteredGraphWrapperinstances 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 intonullfields and properties, generating exceptions that were non-trivial to understand. -
IntersectionsResultno 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
KShortestPathsclass 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 theSimplePathsparameter. -
For usage with a
LayoutGraph, the algorithm is also available via theLayoutGraphAlgorithms.KShortestPathsmethod.
Geometry
New Features and Improvements
-
The new
GeneralPath.AreaOrPathContainsmethod tests if the path fuzzily contains a point and can be used for hit-testing aGeneralPath. -
All methods on the
GeneralPathclass that accept points now have overloads forIPointandPointD, and all methods that accept rectangles now have overloads forIRectangleandRectD. -
There are now methods on
RectDandPointDto calculate the distance between points and rectangles. -
The
GeneralPath.GetProjectionmethod is now faster for paths with Bezier segments. -
The
IRectangleinterface no longer implementsIPoint. 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 itsGetTopLeftmethod. Similarly,IMutableRectangleno longer implementsIMutablePoint.
Bug Fixes
-
Fixed a potential
NullReferenceExceptioninGeneralPath.Render. -
The
GeneralPath.PathMayIntersectClipmethod has been corrected for paths with multiple segments, at least one of which is a cubic segment. -
The
SizeD.Areaproperty now returns 0 for empty sizes. This is consistent with the behavior of theRectD.Areaproperty.
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
- The minimum required .NET versions for yFiles are .NET Framework 4.6.2 and .NET 6.0, respectively.
- The minimum supported .NET versions for the Layout package are now .NET Standard 2.1 and .NET Framework 4.6.2.
- The (up to three) assembly files of the yFiles library are now combined into one single file.
-
The following classes are now sealed:
BorderLineSegment,LayoutGridCellDescriptor,LabelScopeData,ItemCollection,ItemMapping,FreePortLabelModel, andFreeNodeLabelModel. They either already had an internal constructor or do not offer any meaningful members for overriding. -
Removed the
Defaultprefix from the names of the following types:DefaultEdgePathCropper,DefaultFoldingEdgeConverter,DefaultFolderNodeConverter,DefaultLabelStyle,DefaultObservableCollection,DefaultPortCandidate, andDefaultSelectionModel. -
Removed
DefaultLabelModelParameterFinder. -
Removed the protected
IgnoreModifierKeyRepeatsproperty fromCanvasControl. -
Removed the
StripeSelectionclass. Instead, use the instance returned by theTableEditorInputMode.StripeSelectionproperty. -
Consistently use names
PaddingandMarginsin member names:-
Renamed the
TextEditorInputMode.TextBoxPaddingproperty toTextBoxMargins. -
Renamed the
IndicatorLabelStyleDecorator.Paddingproperty toMargins. -
Renamed the
IndicatorNodeStyleDecorator.Paddingproperty toMargins. -
Renamed the
GraphEditorInputMode.ContentRectMarginsproperty toContentMargins. -
Renamed the
OverviewInputMode.Marginsproperty toContentMargins. -
Renamed the
ViewportAnimation.TargetBoundsproperty toTarget. -
Renamed the
ViewportAnimation.TargetViewMarginsproperty toTargetMargins. -
Renamed the
StripeLabelModel.UseActualInsetsproperty toUseTotalPadding. -
Renamed the
StretchStripeLabelModel.UseActualInsetsproperty toUseTotalPadding. -
Renamed the
IStripe.GetActualInsetsmethod toGetTotalPadding. -
Renamed the
GroupNodeStyle.ContentAreaInsetsproperty toContentAreaPadding. -
Renamed
Insetsproperties of allILabelModelimplementations toMargins. -
Replace name part
Insetsof other types and members withPadding.
-
Renamed the
-
Removed the
BridgeManager.ClipMarginproperty. -
Sealed the following classes which have no inheritors:
-
all classes in the
yWorks.Algorithmsnamespace. -
all classes extending the
EventArgsclass. -
all implementations of the
ILabelModelandIObjectRendererinterfaces.
-
all classes in the
-
Enum values that followed the
North,East,South,Westnaming convention have been renamed to follow aTop,Right,Bottom,Leftnaming convention. In particular, the values of the following enums have been renamed:HandlePositions,EdgeSegmentDirection,LabelModels.Position,LabelModels.Position,LabelModels.Position,LabelModels.Position, andLabelModels.Position,. -
The
IReadOnlyList<T>interface replaces theIListEnumerable<T>interface, which has been removed along with its related classesListEnumerable<T>andListEnumerableExtensions. -
Renamed the
PortSideenum toPortSides. -
For consistency reasons, the property
WeakDictionaryMapper.Emptyis now calledIsEmpty. -
Renamed the
CreateEdgeInputMode.AllowSelfloopsproperty toAllowSelfLoops. -
Renamed the
GraphEditorInputMode.SelectNodeAndSelfloopBendsmethod toSelectNodeAndSelfLoopBends. -
Renamed the
GraphEditorInputMode.AutoSelectSelfloopBendsproperty toAutoSelectSelfLoopBends. -
Renamed the
IEdge.IsSelfloopmethod toIEdge.IsSelfLoop.
Graph
Incompatible API Changes
-
The
ILookupinterface and its extension methods have been moved to theyWorks.Utilsnamespace. -
The
IMapperinterface, the Mappers,DictionaryMapper, andWeakDictionaryMapperclasses have been moved to theyWorks.Utilsnamespace. -
The
GraphClipboard.IsDummymethod has been renamed toIsHelper. -
Method
GroupingSupport.GetPathToRoothas been renamed toGetAncestorsand returns anIReadOnlyListinstead of anIList. -
The
ownerparameter of theITable.CreateRow,CreateColumn, andSetParentmethods has been renamed toparent. -
The structural properties of graph items (
IEdge.SourcePort,IEdge.TargetPort,ILabel.Owner,IPort.Owner,IBend.Owner) now throw exceptions if accessed for items that are no longer in the graph. If it is unknown whether the item is still in the graph, please test the item withHasOwnerorHasSourceAndTargetPortfirst before accessing these properties. -
IEdge'sGetSourceNodeandGetTargetNodemethods now throw exceptions if called for an edge that is no longer in the graph or if the owner of the edge's source or target port is not a node. -
The classes
DelegateUndoUnitandCompositeUndoUnithave been removed. The new factory methodsUndoUnits.FromDelegateandUndoUnits.Combinecan be used instead. -
The
UndoUnitBaseclass has been removed. Subclasses now have to implement theIUndoUnitinterface instead. -
GenericPortLocationModelhas been renamed toCompositePortLocationModeland doesn't implementIEnumerableanymore. Instead, theParametersproperty can be used to iterate the parameter. -
The
SegmentRatioPortLocationModelclass is now namedEdgeSegmentPortLocationModel, similar toEdgeSegmentLabelModel. -
The
CreateFromSourceandCreateFromTargetmethods of theSegmentRatioPortLocationModelandBendAnchoredPortLocationModelare now namedCreateParameterFromSourceandCreateParameterFromTarget. -
The
ITagOwnerinterface is now in theyWorks.Utilsnamespace. -
Removed the
TableAnimationclass. Use the factoryAnimations.CreateTableAnimationmethod as a replacement. -
The
GraphItemTypes.NotContainsmethod was removed, use theContainsmethod instead. -
The
FreeEdgeLabelModel.CreateEdgeAnchoredmethod has been renamed toCreateParameter. -
The
FreeNodeLabelModel.CreateDefaultParametermethod has been removed and replaced by the newFreeNodeLabelModel.Centerfield. -
The
FreeNodeLabelModel.CreateCanonicalParametermethod has been renamed toCreateParameter. -
The
FreePortLabelModel.CreateDefaultParametermethod has been removed and replaced by the newFreePortLabelModel.Centerfield. -
Changes to the
GraphCopierclass:-
The methods
CopyNodeStyle,CopyEdgeStyle,CopyPortStyle,CopyLabelStyle,GetOrCreateCopy,CopyLabelLayoutParameter, andCopyPortLocationParameterhave been made protected. -
The methods
CopyNode,CopyGroupNode, andCopyEdgehave been renamed toCreateNode,CreateGroupNode, andCreateEdgeto clarify their role. -
The
Cloneproperty has been renamed toCloneTypes. -
The
Copymethod now uses anIEnumerableof items instead of a filter predicate to define the subset to copy.
-
The methods
-
The
ILabelModel.CreateDefaultParametermethod has been removed. Instead suitable other Create*Parameter methods of the concrete label model implementations should be used. -
The
GenericLabelModelclass has been removed. Its functionality has been integrated into theCompositeLabelModel, which can be used instead. -
The
CompositeLabelModel.LabelModelsproperty has been removed. Instead of adding label models to this list, the newAddModelmethod has to be called. -
The
ILabelModelparameter of theILabelModelParameterFinder.FindBestParameterandILabelModelParameterProvider.GetParametersmethods has been removed. -
The static
LabelModelParameterSerializerandPortLocationModelParameterSerializerclasses have been removed. These classes could be used to retrieve the properties of label model parameters and port location model parameters and are not necessary anymore as the parameter classes are now public. -
The
ILabelModelParameter.Supportsmethod has been removed. Instead, theILabelModel.GetGeometrymethod may now throw an exception if the label and label model parameter don't match. -
The
IPortLocationModelParameter.Supportsmethod has been removed. Instead, theIPortLocationModel.GetLocationmethod may now throw an exception if the port and port location model parameter don't match. -
The
UndoEngine.Tokenproperty replaces theUndoEngine.GetTokenmethod. -
The static parameter fields of
FreeNodePortLocationModelhave been renamed analogue to the static parameter fields inInteriorNodeLabelModel. -
The
IMapperRegistryinterface, theMapperRegistryclass, and theIGraph.MapperRegistryproperty have been removed. To store additional information for graph items, either use the item's Tag property or keep a dictionary alongside the graph.
To configure layout settings for individual items, useLayoutDatainstead. -
The label models
ExteriorLabelModel,InteriorLabelModel, andInteriorStretchLabelModelhave been renamed toExteriorNodeLabelModel,InteriorNodeLabelModel, andStretchNodeLabelModel, respectively,.
Incompatible Behavior Changes
-
The arrow of the default edge style is now
ArrowType.Triangle. -
The default lookup for
INodedoesn't return anIMutableRectangleanymore, the default lookup forIBenddoesn't return anIMutablePointanymore, and the default lookup forILabeldoesn't return anIMutableSizeanymore. -
The rotation direction of
OrientedRectangle,NodeLabel,EdgeLabelandFreeEdgeLabelModelis now clockwise to be consistent with the other models. -
The default value for the
Paddingproperties ofExteriorNodeLabelModel,InteriorNodeLabelModel,StretchNodeLabelModel, andStretchStripeLabelModelhave been changed from empty insets to insets with value 2 on each side. This way the label bounds per default don't touch the bounds of their owner anymore. -
The default value for the
Distanceproperties of theEdgePathLabelModelandEdgeSegmentLabelModelwhen using their default constructors have been changed from 0 to 2. This way the label bounds per default don't touch the edge path of their owner anymore when anEdgeSideother thanOnEdgeis used. -
The
EdgeSegmentPortLocationModel.CreateParameterFromTargetmethod now interprets the parameter ratio from the target to the source side. -
The default edge label model parameter is now created from an
EdgeSegmentLabelModelusing itsCreateParameterFromCentermethod instead ofCreateParameterFromSource.
Controls
Incompatible API Changes
-
The XAML namespace for yFiles WPF has changed and is now
http://www.yworks.com/xml/yfiles-wpf/4.0/XAML. -
GridVisualCreatorhas been renamed toGridRenderer. -
The new
CanvasControl.RenderTreeproperty now encapsulates all low-level render object related API which was previously available directly onCanvasControl.-
This includes the default render tree groups (
RootGroup,BackgroundGroup,ForegroundGroup,ContentGroup,SelectionGroup,FocusGroup,HighlightGroup,InputModeGroup), the helper methods relating to render tree elements (HitElementsAt,IsHit,GetVisual,GetVisualCreator,GetCanvasObjects(nowGetElements),GetBounds). -
Furthermore, some functionality previously available on
ICanvasObject(Group)has been moved toRenderTreeas well, such as creating new elements or groups, changing the parent group or removing a render tree element.
-
This includes the default render tree groups (
-
Renamed the
CanvasControl.AutoDragproperty toAutoScrollOnBounds. -
Renamed the
CanvasControl.AutoDragInsetsproperty toAutoScrollPadding. -
Renamed the
ViewportChanges.AutoDragfield toAutoScrollOnBounds. -
Removed the
DragSize,DragTimeandDoubleClickSizeproperties of theCanvasControlclass. -
Renamed commands
MoveFocusBackandMoveFocusForwardtoMoveFocusLeftandMoveFocusRight. -
Renamed
HighlightIndicatorManager.SelectionModeltoItems. -
Renamed
SelectionIndicatorManager.SelectionModeltoItems. -
Renamed
SelectionIndicatorManager.ModeltoDomain. -
Renamed
Canvasword components in properties and method parameter names toCanvasControl. -
The
GraphModelManagerconstructor no longer hascanvasControlandcontentGroupparameters. Also, theContentGroupproperty can no longer be set directly. Instead, theInstallmethod now sets bothCanvasControlandContentGroup. -
Removed the events
AutoDragChanged,AutoDragInsetsChanged,MouseWheelScrollFactorChanged,MouseWheelZoomFactorChanged, andProjectionChangedof theCanvasControlclass. -
The
ICanvasObject.Groupproperty has been renamed toParent. -
The predefined
EventRecognizerconstants of theMouseEventRecognizers,KeyEventRecognizers, andTouchEventRecognizersclasses have been moved to theEventRecognizersclass. In addition, some rarely used constants have been removed. -
The events on
CanvasControlwhich are related to input devices and the correspondingEventRecognizerconstants have neem renamed to conform to platform conventions. -
Renamed the coordinate transformation methods to also include the source coordinate system in their names:
-
Renamed
CanvasControl.ToViewCoordinatestoWorldToViewCoordinates. -
Renamed
CanvasControl.ToWorldCoordinatestoViewToWorldCoordinates. -
Renamed
IRenderContext.ToViewCoordinatestoWorldToViewCoordinates.
-
Renamed
-
Removed the
AnimateScrollCommandsproperty andCanvasControl.AnimateScrollCommandsPropertyfield. ChangeAnimatedViewportChangesproperty instead. -
ViewportLimiter.LimitViewportnow uses a signature that works with the new typeViewportDescriptorand respects the newViewportLimitingModeenum. -
ViewportLimiter.HonorBothDimensionsis now calledViewportLimiter.StrictBoundsContainmentand the default value changed to false. -
The default
InputModeinGraphControlis no longernullbut is now set toGraphViewerInputMode.
Incompatible Behavior Changes
-
For new
GraphModelManagerinstances, theInstallmethod has to be called either directly or indirectly by assigning theGraphModelManagerto theGraphControl.GraphModelManagerproperty.
Rendering
Incompatible API Changes
-
Added properties
IntermediateToWorldTransformandViewToWorldTransformtoIRenderContext. -
The
ICanvasObjectDescriptorinterface has been renamed toIObjectRendererand itsIsDirtymethod has been removed. -
The
ICanvasObjectinterface has been renamed toIRenderTreeElementand itsUserObjectproperty has been renamed toTag. ItsDescriptorproperty has been replaced with propertyRendererof typeIObjectRenderer. -
The
ICanvasObjectGroupinterface has been renamed toIRenderTreeGroup. -
The
ICanvasObjectInstallerinterface has been removed. -
The singletons of the
CanvasObjectDescriptorsclass are no longer necessary, and thus, this class has been removed. There is now aVoidObjectRenderer.Instancesingleton. -
The
IFocusIndicatorInstaller,IHighlightIndicatorInstaller, andISelectionIndicatorInstallerinterfaces have been renamed toIFocusRenderer,IHighlightRenderer, andISelectionRendererrespectively and now inherit fromIObjectRendererinstead ofICanvasObjectInstaller. Classes implementing these interfaces have been changed accordingly (EdgeStyleDecorationInstaller,LabelStyleDecorationInstaller,NodeStyleDecorationInstaller, andPortStyleDecorationInstallerhave been renamed toEdgeStyleIndicatorRenderer,LabelStyleIndicatorRenderer,NodeStyleIndicatorRenderer, andPortStyleIndicatorRendererrespectively). -
The
GetInstallermethods on theModelManager,FocusIndicatorManager,HighlightIndicatorManager,SelectionIndicatorManager,GraphFocusIndicatorManager,GraphHighlightIndicatorManager, andGraphSelectionIndicatorManagerclasses are now calledGetRendererand returnIObjectRenderer. Similarly, theGetCanvasObjectGroupmethods of these classes have been renamed toGetRenderTreeGroup. -
The members of class
GraphModelManagerhave been adjusted to reflect theICanvasObjectDescriptorandICanvasObjectrenamings. More precisely,DefaultEdgeDescriptor,DefaultLabelDescriptor,DefaultNodeDescriptor,DefaultPortDescriptor,EdgeDescriptor,EdgeLabelDescriptor,NodeDescriptor,NodeLabelDescriptor,PortDescriptor,PortLabelDescriptor,ProvideUserObjectOnMainCanvasObject,GetCanvasObject,GetCanvasObjectGroup,GetCanvasObjectGroup,GetCanvasObjectGroup,GetCanvasObjectGroup, andGetMainCanvasObjecthave been renamed toDefaultEdgeRenderer,DefaultLabelRenderer,DefaultNodeRenderer,DefaultPortRenderer,EdgeRenderer,EdgeLabelRenderer,NodeRenderer,NodeLabelRenderer,PortRenderer,PortLabelRenderer,ProvideRenderTagOnMainRenderTreeElement,GetRenderTreeElement,GetRenderTreeGroup,GetRenderTreeGroup,GetRenderTreeGroup,GetRenderTreeGroup, andGetMainRenderTreeElementrespectively. -
The members of class
ItemModelManagerhave been adjusted to reflect theICanvasObjectDescriptorandICanvasObjectrenamings. More precisely,CanvasObjectGroup,Descriptor,GetCanvasObject,GetCanvasObjectGroup, andGetDescriptorhave been renamed toRenderTreeGroup,Renderer,GetRenderTreeElement,GetRenderTreeGroup, andGetRendererrespectively. -
The
RectangleIndicatorInstaller,OrientedRectangleIndicatorInstaller, andPointSelectionIndicatorInstallerclasses have been removed. -
The
IStripeInputVisualizationHelperinterface is now calledIStripeInputRendererand extendsIObjectRenderer, theDefaultStripeInputVisualizationHelperclass has been removed. -
The
StripeDecorator.InputVisualizationDecoratorproperty has been renamed toInputRenderer. -
The
DefaultPortCandidateDescriptorclass is now calledPortCandidateRenderer. The class no longer has theCandidateDrawingValidNonFocusedKey,CandidateDrawingValidFocusedKey,CandidateDrawingInvalidNonFocusedKey, andCandidateDrawingInvalidFocusedKeystatic properties. -
The new
PortCandidateRendererproperty on theCreateEdgeInputModeclass replaces theCandidateDescriptorandClosestCandidateDescriptorproperties. -
The new public property
PortCandidateRendereron thePortRelocationHandleclass replaces theCreatePortCandidateDescriptorandCreateCurrentPortCandidateDescriptorprotected methods. -
The new public property
PortCandidateRendereron thePortRelocationHandleProviderallows customizing the renderer for the port candidates. -
The new
ViewportRectangleRendererproperty on theOverviewInputModeclass allows customizing the renderer for the viewport rectangle. It replaces theTemplateproperty and theViewportTemplateKeystatic property. -
The new
MarqueeSelectionInputMode.MarqueeRendererproperty replaces theTemplateproperty andMarqueeRectangleTemplateKeystatic property. -
The new
LassoSelectionInputMode.LassoRendererproperty replaces theFinishRegionTemplateandFinishRegionHighlightTemplateproperties and theFinishRegionTemplateKeyandFinishRegionHighlightTemplateKeystatic properties. Also, theLassoPenKeyandLassoFillKeystatic properties have been removed. -
The new
CandidateRendererproperty on theLabelPositionHandlerclass replaces theCandidateTemplateandHighlightTemplateproperties and theCandidateTemplateKeyandHighlightTemplateKeystatic properties. -
The
GetCanvasObjectandGetCanvasObjectsmethods of classCanvasControlhave been renamed toGetRenderTreeElementand have been moved to theGraphModelManagerclass. -
The
CreateSnapResultCanvasObjectDescriptormethod of classSnapContexthas been renamed toCreateSnapResultRenderer. -
The
GraphVisualCreatorproperty of classGraphOverviewControlis now calledGraphOverviewRendererand of typeIObjectRenderer.
Selection, Focus, Highlight
Incompatible API Changes
-
The
IndicatorEdgeStyleDecorator,IndicatorLabelStyleDecorator,IndicatorNodeStyleDecorator, andIndicatorPortStyleDecoratorclasses were removed. Use theEdgeStyleIndicatorRendereretc. classes instead. -
The
GraphFocusIndicatorManager,GraphHighlightIndicatorManager, andGraphSelectionIndicatorManagerclasses were removed. Use theFocusIndicatorManageretc. classes and their default instances on theGraphControlclass instead and register instances of theEdgeStyleIndicatorRendereretc. classes to the item lookups via the graph decorator. -
The
AddSelectionandRemoveSelectionmethods on theSelectionIndicatorManagerclass were removed. Instead, modify theItemsproperty directly. -
HighlightIndicatorManagernow by default uses the newGraphControl.Highlightscollection. Adding, removing, and clearing highlights should now be done via theGraphControl.Highlightsproperty. -
The
ISelectionModelinterface has been removed and usages have been replaced byIObservableCollection. Thus, selecting an element works by callingICollection.Add, deselecting works by callingICollection.Remove, and checking the selection state is done viaICollection.Contains. -
The
ItemSelectionChangedEventArgshave been replaced by usages ofItemEventArgsand there are now two separate events for adding/selecting and removing/deselecting elements from the collections. TheItemSelectionChangedEventArgstype has been removed. -
The default implementations of
IGraphSelectionandIStripeSelectionhave been removed from the public API. -
Class
FocusIndicatorManagerno longer implementsINotifyPropertyChanged. -
Replaced event
FocusIndicatorManager.PropertyChangedwith eventFocusedItemChanged. -
Renamed Method
FocusIndicatorManager.OnPropertyChangedtoOnFocusedItemChangedand changed signature. -
FocusIndicatorManager.ShowFocusPolicychanged its default to the newWhenUsingKeyboard. The old policy calledOnlyWhenFocusedis now calledWhenFocused.
Styles
Incompatible API Changes
-
Methods
CreateVisualandUpdateVisualof classesNodeStyleBase,EdgeStyleBase,LabelStyleBase,PortStyleBaseandStripeStyleBaseare no more abstract but virtual. Added Paint method to these classes as a simpler alternative to the two methods. -
The following classes have been removed:
VoidEdgeStyleRenderer,VoidLabelStyleRenderer,VoidNodeStyleRenderer,VoidPortStyleRendererandVoidStripeStyleRenderer. Instances of these classes can be retrieved from the Renderer property of the corresponding void style implementations. -
The
IArrowinterface now requires theCropAtPortproperty to be provided by implementations. For backward compatibility return false in simple subclasses. -
The class
Arrowis now immutable and comes with separate scale factors for arrow length and width. The default arrow was renamed toArrowType.Stealth, circle arrow toArrowType.Ellipse, and simple arrow toArrowType.Open. The short arrow type was removed. -
Class
TableNodeStyleno longer implementsINotifyPropertyChanged. -
Renamed some values of
TextWrappingShapeandShapeNodeShape:-
Triangle2 is now
TrianglePointingDown. -
Hexagon2 is now
HexagonStanding.
-
Triangle2 is now
-
Removed the following values from
ShapeNodeShape:ShearedRectangle,ShearedRectangle2, Trapez, Trapez2,FatArrow, andFatArrow2.-
Use the
ArrowNodeStylefor more flexible visualizations of these geometries.
-
Use the
-
Renamed
Star5Upto Star5, removed old (down pointing) Star5.-
Use the factory methods on
GeneralPathNodeStylefor stars and polygons with an arbitrary number of points/edges and configurable rotation angle.
-
Use the factory methods on
-
Removed the following values from
TextWrappingShape:ShearedRectangle,ShearedRectangle2, Trapez, and Trapez2. -
Most item style implementations have become sealed, and their renderers have been removed from the API. Instead of
subclassing the styles or their renderers, custom style implementations should use delegation instead. For this the
new
DelegatingNodeStyleandCompositeNodeStylestyle variants may be used. - The item style constructors taking a custom renderer implementation have been removed. Instead, a custom style should be implemented that may delegate to one of the library styles.
-
The
TableNodeStyle.CopyBackgroundStylemethod has been removed. TheClonemethod doesn't deep copy the background style but just uses it for the clone as well, which also was the previous default behavior. -
The
Wrappedproperty ofCollapsibleNodeStyleDecorator,IndicatorNodeStyleDecorator,IndicatorEdgeStyleDecorator,IndicatorLabelStyleDecorator,IndicatorPortStyleDecorator,ShadowNodeStyleDecorator, andIconLabelStylehas been renamed toWrappedStyle. -
The deprecated styles
BevelNodeStyle,PanelNodeStyleandShinyPlateNodeStylehave been removed. -
The default
StringFormatinLabelStylenow usesStringTrimming.EllipsisWord. Before, it wasCharacter. It also usesStringFormatFlags.LineLimitas defaultFormatFlags. Before, no flag was set.
Interaction
Incompatible API Changes
-
CanvasControl'sLastEventLocationproperty has been removed. UseLastPointerEvent.Locationinstead. -
CanvasControl'sLastInputEventproperty has been renamed toLastPointerEventto better reflect its type. -
The
ResourceKeyandComponentResourceKeyclasses have been removed. Their usages have been replaced, often using properties of type Pen orIObjectRenderer. -
The
PortRelocationHandle.GhostVisualizationPenKeyhas been replaced by aGhostVisualizationPenproperty. -
The
SnapLine.SnapLinePenKeyhas been replaced by aSnapContext.SnapResultPenproperty. -
The
MoveLabelInputModeclass and its corresponding property onGraphEditorInputModehave been removed. Label movement is now handled directly byMoveInputMode. Most customizations related tolabelmovement (as opposed to the move gesture in general) can now be done onLabelPositionHandler, instead. -
The commands previously defined on
GraphControlandCanvasControlare now located in class \GraphCommands. The suffix \Commandhas been dropped from their names. -
KeyboardInputMode'sAddHandleroverloads have been renamed toAddRecognizerBindingandAddKeyBindingto clarify their usage. TheAddCommandmethod has been renamed toAddCommandBindingto match the new naming. -
KeyboardInputMode'sRemoveCommandandRemoveHandlermethods have been removed. Instead, the add methods now return a binding token which provides aRemovemethod to remove that binding. -
Replaced
Dummyin names with a more descriptive term. In particular:-
In
CreateEdgeInputMode,DummyEdge,DummyEdgeGraph,DummyTargetNode,,DummyTargetNodePort,UpdateDummyEdgeSourcePort,UpdateDummyEdgeTargetPort,GetDummyEdgeSnapLines, andCreateDummyBendhave been renamed toPreviewEdge,PreviewGraph,PreviewEndNode,PreviewEndNodePort,UpdatePreviewEdgeStartPort,UpdatePreviewEdgeEndPort,GetPreviewEdgeSnapLines, andCreatePreviewBend. -
The
Visualization.Dummyenum value has been renamed toVisualization.Placeholder. -
In
PortRelocationHandle,CreateDummyEdgehas been renamed toCreatePreviewEdge.
-
In
-
The
NavigationInputMode.FindNearestItemmethod now gets thestartItemas a parameter instead of the location of it, and this item is also included in theitemsToCheckparameter. Implementations may use the newGetReferenceLocationmethod to find the starting location and should make sure not to return thestartItemitself. -
The
textProviderparameter forToolTipInputMode's constructor has been removed. An event handler for theQueryToolTipevent can be registered instead. -
The return value of the
DropInputMode.AdjustEffectmethod has been changed from bool to void. This method no longer determines if the mode will handle drag or drop events but only changes the drag/drop effect of given event args as its name implies. TheDropInputMode.AcceptDragmethod now determines if the mode will handle drag and drop events. -
CreateEdgeInputMode's methods have been renamed:-
GetClosestSourceCandidatetoSelectClosestStartCandidate. -
GetClosestCandidatetoSelectClosestCandidate. -
GetClosestTargetCandidatetoSelectClosestEndCandidate.
-
-
CreateEdgeInputMode.StartPortCandidateHitRadiusnow is defined in view coordinates. -
The event
GraphEditorInputMode.LabelTextChangedhas been changed toLabelEditedto reflect the broader scope of changes allowed during label editing. Similarly,GraphEditorInputMode.OnLabelTextChangedis now namedOnLabelEdited. -
Most methods, properties, and events related to label editing have been moved from
GraphEditorInputModetoEditLabelInputMode:AutoRemoveEmptyLabels,HideLabelDuringEditing,TextEditorInputMode,TextEditorInputModeConfigurator,CreateLabel,CreateLabelCore,EditLabelCore,OpenTextEditor,LabelDeleted,LabelTextEditingStarted,LabelTextEditingCanceled, andValidateLabelText. The eventsLabelEditingandLabelAddinghave been moved toEditLabelInputModeand renamed toQueryLabelEditingandQueryLabelAdding, respectively, to clarify their purpose. -
Most methods, properties, and events related to label editing have been moved from
TableEditorInputModetoEditLabelInputMode:AutoRemoveEmptyLabels,HideLabelDuringEditing,TextEditorInputMode,TextEditorInputModeConfigurator,CreateLabel,CreateLabelCore,EditLabelCore,OpenTextEditor,LabelDeleted,LabelTextEditingStarted,LabelTextEditingCanceled, andValidateLabelText. The eventsLabelEditingandLabelAddinghave been moved toEditLabelInputModeand renamed toQueryLabelEditingandQueryLabelAdding, respectively, to clarify their purpose. -
Removed callback methods which only raised the related events from classes
CanvasControlandGraphControl, e.g.,OnZoomChanged. Use the corresponding events instead, e.g.,ZoomChanged. -
Removed the factory methods for the sub-input modes from
GraphInputMode,GraphViewerInputMode,GraphEditorInputMode,TableEditorInputMode, andTextEditorInputMode(e.g.CreateKeyboardInputMode). Set custom instances using the properties, instead. -
Removed the factory methods for the
ToolTipandTextBoxproperties on classesToolTipInputModeandTextEditorInputMode, respectively. Set custom instances using the properties, instead. -
Removed the methods
GetBounds,GetVisual,GetVisualCreator, andIsHitfromCanvasControlclass. Use the respective methods ofRenderTreeclass instead. -
The
ICommandinterface and its implementations have been replaced with the enumCommand. -
Constants of
ICommandhave been replaced with equally named constants of enumCommand. -
The methods
CanExecuteandExecuteand itsCanExecuteChangedevent inICommandhave been replaced withCanvasControl'sCanExecuteCommandandExecuteCommandmethods and theCanExecuteCommandChangedevent, respectively. -
Custom commands can no longer be created. As an alternative, register handlers on
KeyboardInputMode. -
Renamed
DoubleClickPolicytoClickReportingPolicy. -
Renamed
ClickInputMode.DoubleClickPolicytoClickReportingPolicy. -
Renamed
DoubleClickPolicy.InitialSingleAndDoubleClicktoClickReportingPolicy.Instant. -
Renamed
DoubleClickPolicy.DoubleClickOnlytoWaitForDoubleClick. -
Removed
DoubleClickPolicy.BothSingleClicksAndDoubleClick. -
Changed the default of
ClickInputMode.ClickReportingPolicytoClickReportingPolicy.Instant. -
Removed the
PreventNextDoubleClickmethod fromClickInputModeclass. Use theCancelmethod instead. -
Replaced
Mouse2DEventArgsandTouch2DEventArgswithPointerEventArgs. -
Integrated
TapInputModeintoClickInputMode. Touch input now also firesClickedevents. -
Removed all
ClickInputModeevents except forClicked. Click buttons and click count can be obtained from theClickEventArgs. -
Removed the events
ItemTapped,ItemDoubleTapped, andCanvasTappedfromGraphInputModein favor of checking thePointerTypeon the corresponding Click event. -
The
HandleIsHitTouchandGetClosestHitHandleTouchmethods ofHandleInputModehave been removed in favor of the methodsHandleIsHitandGetClosestHitHandle, which now handle all types of pointer devices. -
The
InputModeContextproperty has been removed from theIInputModeinterface. In input mode implementations, the property has been renamed toParentInputModeand changed to protected access to prevent incorrect usage. -
Renamed "Source" to "Start" and "Target" to "End" in the following members of
CreateEdgeInputModeclass:-
Renamed
ResolveSourcePortCandidatestoResolveStartPortCandidates. -
Renamed
ResolveTargetPortCandidatestoResolveEndPortCandidates. -
Renamed
SourcePortCandidateChangedtoStartPortCandidateChanged. -
Renamed
TargetPortCandidateChangedtoEndPortCandidateChanged. -
Renamed
SourcePortCandidatetoStartPortCandidate. -
Renamed
TargetPortCandidatetoEndPortCandidate. -
Renamed
SnapToTargetCandidatetoSnapToEndCandidate. -
Renamed
CancelGestureOnInvalidTargettoCancelGestureOnInvalidEnd. -
Renamed
SourceNodeDraggingFinishedRecognizertoStartPortOwnerDraggingFinishedRecognizer. -
Renamed
SourceNodeDraggingCursortoStartPortOwnerDraggingCursor. -
Renamed
ShowSourcePortCandidatesHitTestabletoShowStartPortCandidatesHitTestable. -
Renamed
OnSourcePortCandidateChangedtoOnStartPortCandidateChanged. -
Renamed
OnTargetPortCandidateChangedtoOnEndPortCandidateChanged. -
Renamed
SourcePortCandidateChangedtoStartPortCandidateChanged. -
Renamed
TargetPortCandidateChangedtoEndPortCandidateChanged. -
Renamed
GetSourcetoGetStartPortOwner. -
Renamed
GetTargettoGetEndPortOwner. -
Renamed
GetSourcePortCandidateProvidertoGetStartPortCandidateProvider. -
Renamed
GetTargetPortCandidateProvidertoGetEndPortCandidateProvider. -
Renamed
GetSourcePortCandidatestoGetStartPortCandidates. -
Renamed
GetTargetPortCandidatestoGetEndPortCandidates. -
Renamed
GetSourcePortCandidate(PointD)toGetStartPortCandidate. -
Renamed
GetSourcePortCandidate(IEnumerable<,IPortCandidate>PointD, bool) toSelectStartPortCandidate. -
Renamed
GetClosestCandidatetoSelectClosestCandidate. -
Renamed
GetClosestSourceCandidatetoSelectClosestStartCandidate. -
Renamed
GetClosestTargetCandidatetoSelectClosestEndCandidate. -
Renamed
SourcePortCandidateHitRadiustoStartPortCandidateHitRadius. -
Renamed
UpdateTargetLocationtoUpdateEndLocation. -
Renamed
ShowTargetHighlighttoShowEndHighlight. -
Renamed
UpdateTargetHighlighttoUpdateEndHighlight. -
Renamed
DummyTargetNodetoPreviewEndNode. -
Renamed
DummyTargetNodePorttoPreviewEndNodePort.
-
Renamed
-
Renamed
ShowPortCandidates.SourcetoStartandShowPortCandidates.TargettoEnd. -
Removed
CreateEdgeInputMode.CreateDummyEdgeGraph,CreateEdgeInputMode.CreateDummyEdge,CreateEdgeInputMode.CreateDummyTargetNode,CreateEdgeInputMode.CreateDummyTargetNodePort,CreateEdgeInputMode.DummySourceNodePort,CreateEdgeInputMode.UpdateDummyEdgeSourcePort, andCreateEdgeInputMode.UpdateDummyEdgeTargetPort. -
Events which involve item changes triggered by input modes are now of type
InputModeItemEventArgsinstead ofItemEventArgs. These are the events:-
CreateBendInputMode:BendCreated. -
CreateEdgeInputMode:StartPortCandidateChanged,EndPortCandidateChanged,EdgeCreated,PortAdded,EdgeCreationStarted. -
GraphEditorInputMode:LabelEdited,LabelAdded,NodeCreated,PortAdded. -
ItemDropInputModeand inheritors:ItemCreated. -
NavigationInputMode:GroupCollapsing,GroupCollapsed,GroupExpanding,GroupExpanded,GroupEntering,GroupEntered,GroupExiting,GroupExited. -
TableEditorInputMode:DeletedItem. -
EditLabelInputMode:LabelAdded,LabelEditingStarted,LabelEditingCanceled,LabelEdited. -
StripeDropInputMode:StripeCreated.
-
-
Events which involve item deletion or structural changes triggered by input modes are now of type
InputModeItemChangedEventArgs:-
GraphEditorInputMode.DeletedItem:InputModeItemChangedEventArgsinstead ofItemDeletedEventArgs. -
GraphEditorInputMode.EdgePortsChanged:InputModeItemChangedEventArgsinstead ofEdgeEventArgs. -
GraphEditorInputMode.NodeReparented:InputModeItemChangedEventArgsinstead ofNodeEventArgs. -
EditLabelInputMode.LabelDeleted:InputModeItemChangedEventArgsinstead ofLabelEventArgs.
-
-
Removed the
PortRelocationHandle.CreateDummyEdgeVisualCreatormethod. To change the preview edge's style overwritePortRelocationHandle.CreatePreviewEdgeinstead. -
Renamed
GraphInputMode.ShouldSelectItemtoShouldSelect. -
The event
DeletedSelectionofGraphEditorInputModenow usesItemsEventArgsinstead ofSelectionEventArgs. -
The static fields
AllNodeCandidatesandAllNodeAndEdgeCandidatesonEdgeReconnectionPortCandidateProvidershave been replaced by the factory methodsFromAllNodeCandidatesandFromAllNodeAndEdgeCandidates. The implementations now provide a port candidate for the unchanged port of the edge when collecting the port candidates from theIPortCandidateProviderinstances of the nodes and edges. -
The generic type of the
IHitTesterinterface has been removed. Instead, a parameter of typeGraphItemTypeshas been added to itsEnumerateHitsmethod. -
The
HandleTypesenums has been refactored to a non-flaggableHandleTypeenum, and the values have been adjusted. -
A
Tagproperty has been added to theIHandleinterface. yFiles does not use the property and initializes it withnull, but decorating handles forward any values unmodified. -
The protected virtual
CreateEdgeCreationInputModeContextmethod on theCreateEdgeInputModeclass has been removed. Use or override theCreateInputModeContextmethod, instead. -
The protected
Should-methods of the input modes have been removed and replaced by predicate properties. -
The
LassoSelectionEventArgs.SelectionPathproperty has been renamed to Path. -
The core
MarqueeSelectandLassoSelectmethods ofGraphEditorInputModeandGraphViewerInputMode, that take an enumerable and predicate, have been removed while the otherMarqueeSelectandLassoSelectmethod got an additional parameter of typeSelectionPolicy. -
The
LabelPositionHandler.SetPositionmethod has been removed. -
The
LabelPositionHandler.UseFinderproperty has been removed. Use the newUseParameterFinderRecognizerproperty instead. -
The
LabelPositionHandler.UseParameterFindermethod has been renamed toShouldUseParameterFinder. -
The
ToolTipQueryEventArgsclass is now namedQueryToolTipEventArgsto properly match the corresponding event's name. -
The
LabelPositionHandler.UseFinderproperty has been removed. -
Method
GetBendsInPathhas been added to theIBendSelectionTesterinterface and is used to check for bends that should be lasso selected. -
Method
GetPortsInPathhas been added to theIPortSelectionTesterinterface and is used to check for ports that should be lasso selected. -
DiscardInvalidItemsinItemHoverInputModehas been renamed toIgnoreInvalidItems, and its behavior was reversed. -
The
DoStartEdgeCreationmethod on theCreateEdgeInputModeclass is now calledStartEdgeCreation. -
The
DoStartDragmethod on theMoveInputModeclass is now calledStartDrag. -
The
BeginDraggingmethod on theHandleInputModeclass is now calledStartDrag. -
The
AddLabelmethod onGraphEditorInputModeis now calledStartLabelAddition. -
The
EditLabelmethod onGraphEditorInputModeis now calledStartLabelEditing. -
The
MouseHoverInputModeclass has been renamed toToolTipInputMode. -
The
GraphInputMode.MouseHoverInputModeproperty has been renamed toToolTipInputMode.
Incompatible Behavior Changes
-
The default lookup of labels now returns an
IPositionHandlerimplementation. -
The
LabelDropInputMode.IsValidLabelOwnermethod now only accepts instances ofFreeLabelModelor that thedraggedLabel's owner type matches the owner type e.g.INode,IEdge, orIPort. -
The
DropInputMode.AdjustEffectmethod no longer determines if the mode will handle drag or drop events but only change the drag/drop effect of given event args as its name implies. TheDropInputMode.AcceptDragmethod now determines if the mode will handle drag and drop events. - Unselected items can be moved by default.
- Edge creation: by default, start port candidates are shown when hovering over a node.
-
GraphViewerInputMode/GraphEditorInputMode: theClickHitTestOrderdefault value has been changed toGraphItemTypes.Allwhich means that the default order is the Z-Order but with a prioritization for elements behind labels. -
GraphViewerInputMode: TheMoveViewportInputMode's priority has been changed to 190. -
GraphEditorInputMode: The sub input mode's priorities have been changed to the following order:WaitInputMode,KeyboardInputMode,HandleInputMode,ClickInputMode,CreateEdgeInputMode,MoveSelectedItemsInputMode,MoveUnselectedItemsInputMode,CreateBendInputMode,MoveViewportInputMode,LassoSelectionInputMode,MarqueeSelectionInputMode,ItemHoverInputMode,NavigationInputMode,ContextMenuInputMode,NodeDropInputMode,LabelDropInputMode,PortDropInputMode,ToolTipInputMode,EditLabelInputMode. -
In
CreateEdgeInputModeit was previously possible to define a fallback forGetPortOwnerifIHitTesterwas removed. This option for defining a fallback is removed and always returnsnull. -
Improved the
CreateBendInputModebehavior: Previously, dragging an existing bend triggered theBendCreatedevent, causing confusion and limiting event handling for new bend creation. This has been adjusted to ensure the event only fires when a new bend is created interactively. -
Refined the event sequence of
CreateEdgeInputModeto ensure consistency and symmetry between gesture cancellation and completion. -
Reorganized the sequence to include
EdgeCreationStartedonly after the start node dragging has finished and the end port candidate is determined. -
Adjusted the timing of the end port candidate update, which now occurs just before
GestureFinishing, allowing users to apply final updates to the end port. -
Ensured the following event order for gestures:
-
GestureStarting,GestureStarted. -
Cancellation path:
GestureCanceling,GestureCanceled. -
Completion path:
EdgeCreationStarted,GestureFinishing,EdgeCreated,GestureFinished.
-
-
The
EdgeCreationStartedandEdgeCreatedevents provide now arguments of typeItemEventArgs<.IEdge> -
NavigationInputModenow interprets the direction of arrow keys in view coordinates by default. -
Edges can now be reconnected to other nodes per default. The old behavior can be restored by decorating the edge
lookup with the provider returned by
EdgeReconnectionPortCandidateProviders.FromSourceAndTarget. -
The default value of
EnableSnappingRecognizerinCreateEdgeInputMode,HandleInputMode, andMoveInputModehas been changed fromCtrlUptoAltUp. -
The default value of
DisableSnappingRecognizerinCreateEdgeInputMode,HandleInputMode, andMoveInputModehas been changed fromCtrlDowntoAltDown. -
The default value of
CenterReshapeRecognizerinNodeReshapeHandleProviderandReshapeHandlerHandlehas been changed fromAltIsDowntoCtrlIsDown. -
The default value of
ReparentNodeHandler.ReparentRecognizerhas been changed fromShiftIsDowntoCtrlIsDown. -
The
GraphInputMode.FindItemsmethod now considers the actual z-order of the hit items. -
Orthogonal edge editing now has to be enabled for each edge that should be edited orthogonally instead of enabling
it for all edges by setting the
GraphEditorInputMode.OrthogonalEdgeEditingContextproperty. This can be done by enabling thePolylineEdgeStyle.OrthogonalEditingproperties of the styles, by setting an apropriateFallbackEdgeHelperProvideron the usedOrthogonalEdgeEditingContextor by providing anIOrthogonalEdgeHelperin the edges' lookup. -
The
MultiSelectionRecognizerofGraphEditorInputModeandGraphViewerInputModeare not used anymore for marquee and lasso selection. Instead,MarqueeSelectionInputModeandLassoSelectionInputModehave their own modifiers for different selection policies. -
Changed the default of
TextEditorInputMode.TextBoxPlacementPolicytoTextBoxPlacementPolicy.MoveTextBox. -
CanvasControl.UpdateContentBoundsnow only considers the items in theRenderTree.ContentGroupinstead of theRootGroupwhen calculating the new bounds. -
The default value of
CreateEdgeInputMode.PortCandidateResolutionRecognizerhas been changed fromShiftIsDowntoCtrlIsDown. -
The default value of the
CreateEdgeInputMode.EnforceBendCreationRecognizerhas been changed formCtrlIsDowntoAltIsDown. -
The default edge lookup doesn't provide an
IPositionHandleranymore so dragging a selected edge doesn't move all its bends. -
GraphEditorInputMode'sMoveUnselectedItemsInputModenow only moves unselected items. Previously it also moved selected items despite its name. -
The default value of
TextEditorInputMode.AutoCommitOnFocusLostis nowtrue. This means that the text of an edited label is commited instead of discarded when the text box loses the focus e.g. by clicking on the canvas. - During edge creation, bends are now created when pressing a mouse button instead of releasing it. This way, when starting edge creation by dragging the mouse from a node, no bend is created on the first mouse button release, which was an often unwanted behavior.
-
The default values of the
NodeReshapeHandleProvider.RatioReshapeRecognizerproperty andReshapeHandlerHandlehas been changed tonull. If no custom recognizer is set,ReshapeHandlerHandleuses the newHandleInputMode.IsDirectionalConstrainedmethod instead if aHandleInputModeis found in theIInputModeContext. -
GraphEditorInputMode.AllowGroupingOperationsis now true by default.
Snapping
Incompatible API Changes
-
LabelSnapContexthas been removed, and label snapping is now handled byGraphSnapContext:-
The
GraphEditorInputMode.LabelSnapContextproperty and theGraphEditorInputMode.OnLabelSnapContextChangedmethod have been removed. -
The
CollectLabelSnapLineEventArgsclass has been removed. -
Configuration properties of
LabelSnapContexthave been moved toGraphSnapContextand renamed. -
The
ILabelSnapContextHelperinterface and theLabelSnapContextHelperclass have been removed. Instead, theILabelSnapResultProviderinterface and the classesLabelSnapResultProviderandLabelSnapReferenceProviderhave been added. -
The
LabelDecorator.LabelSnapContextHelperDecoratorproperty has been replaced by the propertiesSnapReferenceProviderandSnapResultProvider.
-
The
-
CollectGraphSnapLinesEventArgshas been renamed toCollectSnapReferencesEventArgs. Its methodsAddFixedNodeSnapLine,AddFixedSegmentSnapLine,AddPortSnapLine, andAddAdditionalSnapLinehave been removed and replaced by the singleAddSnapReferencemethod. -
GraphSnapContexthas been refactored, and the following members have changed:-
The properties
SnapNodesToSnapLines,SnapBendsToSnapLines,SnapSegmentsToSnapLines,SnapBendAdjacentSegments,SnapPortAdjacentSegments,SnapEdgeLabels,SnapNodeLabels, andSnapPortLabelshave been replaced by the new propertiesSnappableItemsandGridSnappableItems. -
The
CollectVisibleNodePairsmethod now takes theCollectSnapReferencesEventArgsthe snap references shall be added to. -
The methods
FindSameWidthEntriesandFindSameHeightEntrieshave been removed. Instead, theSnapSizereferences describing to which size items can snap are provided by theSnapReferencesproperty. Similarly, theFixedNodeSnapLines,FixedSegmentSnapLines,FixedPortSnapLines, andAdditionalSnapLinesproperties have been removed. TheSnapReferencesproperty should be used instead.
-
The properties
-
The
SnapLine.ResourceKeyproperty has been removed along with most of the staticResourceKeymembers used for snapping. Instead, aVisualizationTypeproperty of the enum typeSnapReferenceVisualizationTypeis used to describe which visualization should be used for theSnapLine. -
Most subclasses of
SnapLinehave been removed as they only provided properties used for the visualization that are now available onSnapResult. -
The
SnapTypesenum used bySnapResulthas been replaced by the newSnapConstraintclass that supports finding common snap locations forSnapResultswith different constraints. -
The
SnapandIsSnappedmethods ofSnapResulthave been removed. Instead, aConstraintproperty of typeSnapConstrainthas been added that is used to merge possibleSnapResultsand check if a location is valid for a givenSnapResult. -
The
SnapResult.GetVisualCreatormethod has been removed and is replaced by the newObjectRendererproperty. -
The factory methods of
SnapResultshave been adjusted:-
CreatePointSnapResulthas been renamed toCreateSnapResult. -
CreateSnapLineSnapResulthas been renamed toCreateLineSnapResult. -
CreateLabelSnapResulthas been removed.
-
-
The methods of the snap result providers have been adjusted to support the new
SnapReferenceAPI. Most methods now take one instance of aSnapReferencesubclass likeSnapLineorSnapGrid. -
The classes
SnapState,ArrowContainer, andArrowControlhave been removed. -
The type of the
SnapContextproperties of all input modes has been changed fromSnapContexttoGraphSnapContext. -
Most classes and members that had
SnapLinein their name have been renamed to includeSnapReferenceinstead. -
The
ReshapeRectangleContext.InitialBoundsproperty has been renamed toInitialLayout. -
The
GraphEditorInputMode.SnapContextproperty is now set per default and may not benull. It is disabled per default. -
Renamed the
GraphSnapContext.NodeToNodeDistanceproperty toNodeDistance. -
Renamed the
GraphSnapContext.EdgeToEdgeDistanceproperty toEdgeDistance.
Clipboard
Incompatible API Changes
-
IClipboardHelper's methodsCut,Copy, andPastehave been renamed toOnCut,OnCopied, andOnPasted. -
IClipboardHelper's methodsCutandCopydon't return anobjectanymore and theobjectparameter ofPasteandShouldPastehas been removed. ForCut/CopyandPastethe sameIClipboardHelpermethod is now used so any state that should be transfered can be stored in a custom implementation. -
IClipboardHelperhas new methodsShouldDuplicateandOnDuplicatedwhich have to be implemented, now. -
GraphClipboard`s methodsGetMementoandGetClipboardHelperhave been removed. -
GraphClipboard's protectedCopyandPastemethods now take the newClipboardOperationContextas parameter instead of thesourceGraphsandfilterpredicates. -
The methods
CreateClipboardGraph,CreateToClipboardCopier,CreateFromClipboardCopier,CreateDuplicateCopier, andCreateDefaultClipboardIdProviderfromGraphClipboardthat were used to lazily initialize the corresponding properties have been removed. -
GraphClipboard.Pastenow takes an enumerable ofIModelItemastargetOwnersparameter instead of atargetFilterpredicate. -
GraphClipboard.IsFoldingStateElementis now an instance method and doesn't have an owner parameter anymore. -
ElementCopiedCallbackhas been renamed toItemCopiedCallback. -
GraphViewerInputMode'sElementsCopiedevent has been renamed toItemsCopied. -
GraphEditorInputMode'sElementsCopied,ElementsCut,ElementsCopied,ElementsPastedandElementsDuplicatedevents were renamed toItemsCopied, etc. -
On
GraphClipboard, theElementsCut,-Cutting,-Copying,-Copied,-Pasting,-Pasted,-Duplicating, and-Duplicatedevents were renamed toItemsinstead ofElementsand use the newGraphClipboardEventArgs. Also, theOnElementCut,-Copied-, and-Pastedmethods were renamed to start withOnItemand take an additionalClipboardOperationContextas a parameter. -
GraphClipboard.RemoveElementshas been renamed toRemoveItems. -
GraphClipboard.IsFoldingStateElementhas been renamed toIsFoldingStateItem. -
GraphClipboard.CreateContextnow takes an additionalIInputModeContextparameter that should be returned in the new contexts lookup. -
The
GraphClipboard.ClipboardGraphproperty is now read-only. -
The parameters of
GraphClipboard'sCopymethod have been rearranged so default values for optional parameters could be added. -
For consistency reasons, the property
GraphClipboard.Emptyis now calledIsEmpty. -
GraphControlinstances now use a sharedGraphClipboardper default. To revert to the previous behavior, a newGraphClipboardinstance can be set on eachGraphControl. -
GraphClipboard'sCut,Copy,Paste, andDuplicatemethods now use anIEnumerableinstead of a filter predicate to determine the subgraph to copy. -
GraphClipboard'sCreate*Filtermethods have been removed. -
The
GraphClipboardnow usesClipboardGraphCopierinstances for itsToClipboardCopier,FromClipboardCopier, andDuplicateCopier. -
The
Graph.ParentNodeDetectionModeshas been reduced to contain only the mainly used options. The optionRoothas been renamed toNone, and the optionsAllowSelfandForceas well as theModeMaskandModifierMaskhave been removed. TheGetTargetNodemethod can be overridden if the reduced modes are not suitable and may call the newFindParentByPreviousParentmethod to simulate the oldForcesetting. -
GraphClipboard`sGetTargetmethods now take an additionalClipboardOperationContextparameter, and theGetTargetoverload for nodes also takes apasteLocationas an additional parameter. -
The
GraphClipboard.PasteDeltaproperty has been renamed toPasteOffset. It is now modified by theGraphClipboard'sCut,Copy,Paste, andDuplicatemethods instead of the corresponding methods onGraphEditorInputMode. -
The
GraphEditorInputMode.PasteDeltaproperty has been removed and replaced by the newGraphClipboard.PasteOffsetIncrementproperty. -
The values
LabelModelParameterandPortLocationModelParameterhave been removed from theCloneTypesenum as those parameter are typically immutable, so cloning them has no effect.
Folding
Incompatible API Changes
-
Interface
IFolderNodeConverterhas a newUpdateGroupNodeStatemethod. -
Interface
IFoldingEdgeConverterhas a newUpdateMasterEdgesmethod. -
FolderNodeConverternow relies onFolderNodeDefaultsto configure initialization and update of states. -
FoldingEdgeConverterandMergingFoldingEdgeConverternow rely onFoldingEdgeDefaultsto configure initialization and update of states. -
The
FoldingLabelOwnerState.Removemethod(. -
FoldingLabelState) was renamed toRemoveLabeland theFoldingLabelState.RemoveBendmethod(FoldingBendState) was renamed toRemoveBend.
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
IFolderNodeConverterandIFoldingEdgeConverterimplementations. The default implementations already synchronize the tags. -
In the graph of a folding view, the
CreateGroupmethod now always creates a group even if theisExpandedpredicate specified in theFoldingManager.CreateFoldingViewmethod specifies otherwise. Create the group on the master graph if you want the predicate to be respected.
Lookup
Incompatible API Changes
-
Renamed
LookupDecorator.SetImplementationtoAddConstant. -
Renamed
LookupDecorator.SetFactorytoAddFactory. -
Renamed
LookupDecorator.SetImplementationWrappertoAddWrapperFactory. -
Renamed
LookupDecorator.HideImplementationto Hide. -
Renamed lookup decorators in general by removing the
Decoratorsuffix. For example,graphDecorator.EdgeDecorator.PositionHandlerDecorator.HideImplementationis nowgraphDecorator.Edges.PositionHandler.Hide. -
Removed
LookupDecorator.NullIsFallback. Instead, use the predicate of theAddFactorymethod or return the original instance in theAddWrapperFactorymethod. -
Removed
LookupDecorator.DecorateNulls. Instead, implement the desired behavior inAddWrapperFactory. -
Removed the
SimpleNode.LookupImplementationproperty,SimpleEdge,SimpleBend,SimpleLabelandSimplePort. Instead, use the newGetDecoratormethod to adjust the item's lookup. -
The
SimpleNode,SimpleEdge,SimpleBend,SimpleLabelandSimplePortclasses are now sealed, and theirLookupmethod is no longer virtual. To adjust the item's lookup, use theGetDecoratormethod. -
Removed
CanvasControl.InputModeContextLookupandCanvasControl.InputModeContextLookupChain. Instead, use the newGetInputModeContextDecoratorFormethod to decorate the input mode context lookup. -
The
EdgeDecorator.GetDecoratorFormethod,NodeDecorator, etc. no longer has thenullIsFallbackanddecorateNullparameters. -
The
nodeparameter of the methods in the interfacesIGroupPaddingProvider,INodeSizeConstraintProvider, andIGroupBoundsCalculatorhas been removed. -
The
edgeparameter of the methods in the interfacesIEdgePortHandleProvider,IBendCreator, andIOrthogonalEdgeHelperhas been removed. -
The
labelparameter of the methods in the interfacesILabelModelParameterProvider, andILabelModelParameterFinderhas been removed. -
The model item parameter in
ISnapReferenceProvider.AddSnapReferenceshas been removed. -
The
ILabelModelParameterparameter ofILabelModel.GetContexthas been removed andILabelModeldoesn't extendILookupanymore. Instead, the lookup returned byGetContextshould be used for all lookup calls. -
The
IPortLocationModelParameterparameter ofIPortLocationModel.GetContexthas been removed andIPortLocationModeldoesn't extendILookupanymore. Instead, the lookup returned byGetContextshould be used for all lookup calls. -
The
OrthogonalEdgeEditingContext.GetOrthogonalEdgeHelpermethod has been replaced by theFallbackEdgeHelperProviderandOrthogonalEdgeHelperProviderproperties. -
The
INodeInsetsProviderinterface was renamed toIGroupPaddingProvider. -
The methods
SetLookupImplementationandGetLookuphave been removed fromDefaultGraph. Instead theLookupmethod should be overridden if the default lookup behavior should be replaced. -
The methods
SetLookupandGetLookuphave been removed fromGraphWrapperBase. Instead, theLookupmethod should be overridden if the default lookup behavior should be replaced.
GraphML
Incompatible API Changes
-
The methods
GraphMLIOHandler.AddInputMapperFutureandGraphMLIOHandler.AddInputHandlerFactoryhave been removed, together with their support classes. -
The
AddRegistryInputMapperandAddRegistryOutputMappermethods have been removed fromGraphMLIOHandler, since theMapperRegistryhas been removed. To read or write additional per-item data, use theAddInputMapperorAddOutputMappermethods, instead.
View-Layout-Bridge
Incompatible API Changes
-
The properties
LayoutExecutor.SelectionModelandLayoutGraphAdapter.SelectionModelhave been removed, meaning that selected items of theIGraphare no longer automatically marked in theLayoutGraphvia keys like the formerLayoutKeys.AffectedNodesDpKey. If the selected items should be marked for a specific key of layout algorithms, then these items can always be provided via the specificLayoutDataproperty of the layout algorithms. -
Removed the
ContextItemMappingclass. -
Renamed the
LayoutExtensions.MorphLayoutmethod toApplyLayoutAnimated. -
Renamed the
LayoutExecutor.Durationproperty toAnimationDuration. -
Renamed the
LayoutExecutor.CreateMorphAnimationmethod toCreateLayoutAnimation. -
The
LayoutGraphAdapter.PortDummyNodeDpKeyconstant has been renamed toPortHelperNodeDataKey. -
Renamed
ItemMapping.DelegatetoMapperFunction. -
Renamed
ItemCollection.DelegatetoPredicate. -
Removed key
LayoutGraphAdapter.OriginalTagDpKey. Use the Tag property of the layout items instead to get the original tag associated to the originalIGraphitems. -
Renamed the
LayoutExecutor.Durationproperty toAnimationDuration. -
Replaced
LayoutExecutor.LabelPreferredPlacementPolicywithItemMappingLayoutExecutor.LabelPlacementPolicies. -
Renamed Enum
LabelPreferredPlacementPolicytoLabelPlacementPolicy. -
Removed value
FromDescriptor.PreferredPlacementDescriptors are now automatically considered when specified throughLayoutDatas.-
Renamed value
FromModeltoPreferModel. -
Renamed value
FromParametertoPreferParameter. -
Added value
KeepParameter, which suppresses the write-back of label positions to the view graph.
-
Renamed value
-
Replaced
LayoutGraphAdapter.LabelPreferredPlacementPolicywithItemMappingLayoutGraphAdapter.LabelPlacementPolicies. -
Changed property
PortAdjustmentPolicyofLayoutExecutorclass to anItemMappingPortAdjustmentPolicieswhich allows for different values for each port. The default isPortAdjustmentPolicy.Lengthen. -
Changed property
PortAdjustmentPolicyofLayoutGraphAdapterclass to anItemMappingPortAdjustmentPolicieswhich allows for different values for each port. The default isPortAdjustmentPolicy.Lengthen. -
LayoutExecutor.AutomaticEdgeGroupinghas been removed. Edges at the same port are now always automatically port grouped unless port groups have been defined explicitly. -
LayoutGraphAdapter.AutomaticEdgeGroupinghas been removed. Edges at the same port are now always automatically port grouped unless port groups have been defined explicitly. -
The
TableLayoutConfigurator.PrepareandLayoutExecutor.PrepareTableLayoutmethods now return aPartitionGridDatainstance. -
Boolean
LayoutExecutor.FixPortsproperty is replaced by anItemMappingPortPlacementPolicies, that allows to specify a policy for the handling of each individual port.
Incompatible Behavior Changes
-
The
LayoutGraphAdapterclass 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 theLayoutGraphproperty and initialized with methodLayoutGraphAdapter.Initialize. After initialization, changing properties of theLayoutGraphAdapterhas 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
-
Replaced usages of the
IComparerinterface withComparisonfunction delegates. -
Removed the
IDataProviderinterface and refactored the whole way data is registered with aLayoutGraphinstance. The replacement ofIDataProvideris the genericIMapperinterface. It allows setting and getting data via an indexer.-
Removed the methods
Graph.AddDataProviderandRemoveDataProvider. Data is now registered and removed using the methods on the newLayoutGraphContextclass (e.g.AddItemData,AddData,Remove). -
Removed the
Graph.DataProviderKeysproperty.
-
Removed the methods
-
Removed the class
Maps. -
The nested
Segmentclass ofBorderLineis now the unnestedBorderLineSegmentclass, and some of its members have been changed:-
Renamed
GrowtoEnlarge,AddOffsettoAddPositionOffset,MintoMinPositionandMaxtoMaxPosition. -
Removed the
BorderLine.AdoptValuesmethod. -
Converted
BorderLine.FirstSegment,BorderLine.LastSegment,BorderLine.Segment.PrevandBorderLine.Segment.Nextfrom methods to read-only properties, and renamedPrevto Previous. -
Removed
BorderLine.PrevandBorderLine.Next. Use methodsBorderLineSegment.PreviousandBorderLineSegment.Nextinstead.
-
Renamed
-
The
MultiStageLayoutclass has been removed from the API. TheHierarchicalLayout(formerlyHierarchicLayout),OrganicLayout,OrthogonalLayout,TreeLayout,RadialTreeLayout(formerlyBalloonLayout),SeriesParallelLayout,RadialLayout,CompactDiskLayout, andRadialGroupLayout(formerlyCactusGroupLayout) classes now directly implementILayoutAlgorithm. These classes offer a newLayoutStagesproperty that allows to access the mutable stack ofILayoutStageinstances associated with the respective algorithm. In addition, the offer different new properties to directly access frequently used stages. -
The read/write properties
MinimumSizeGroupBoundsCalculator.MinimumNodeSizeDpKeyandInsetsGroupBoundsCalculator.GroupNodeInsetsDpKeyhave been removed. The bounds calculator classes now always use the values defined via the keysLayoutKeys.MinimumGroupNodeSizeDataKeyandLayoutKeys.GroupNodePaddingDataKey. Using theIGraphAPI, the insets and minimum sizes are registered automatically, so that this change has no effect. -
The read/write properties
SubgraphLayout.AffectedNodesDpKeyandSubgraphLayout.AffectedEdgesDpKeyhave been removed. They were replaced by static read-only keysSubgraphLayoutStage.SubgraphNodesDataKeyandSubgraphLayoutStage.SubgraphEdgesDataKey. -
PortConstraints andPortCandidates have been unified and renamed toLayoutPortCandidate. -
PortDirectionsandPortSidehave been unified asPortSides, and the enum values of the sides have been renamed. -
PortCandidateSets have been replaced byNodePortCandidates, and collections ofPortCandidates for edges have been replaced byEdgePortCandidates. -
The port-related settings in the
LayoutDataclasses have been combined into a sub-LayoutDataPorts. -
The keys in
PortConstraintKeyshave been moved toLayoutKeys. -
The
SequentialLayout.Layoutsproperty is now a read-onlyList. The<ILayoutAlgorithm>AppendLayout,AppendLayouts, andRemoveAllmethods have been removed as their functionality is now handled by the list methods. -
Replaced properties
XOffsetandYOffsetof thePortCandidateclass by a single propertyOffsetof typePointD. -
Renamed
Graph.ReInsertNodeandReInsertEdgetoLayoutGraph.Reinsert. -
From
LayoutGraphHider, theFireGraphEventsandGraphproperties, and theHideEdges,HideSelfLoops,SimplifyGraph, andHideMultipleEdgesmethods have been removed. Also, all methods to hide and unhide various collections of nodes or edges have been replaced byHideandUnhidemethods that get anIEnumerableofNodeorEdge. -
The classes
SelfLoopRouterandParallelEdgeRouterhave been moved from theyWorks.Layoutnamespace to theyWorks.Layout.Routernamespace. -
Removed the
NodeHaloclass. Halos are now specified asInsetsDand called node margins. in the correspondingLayoutData(e.g.HierarchicalLayoutData.NodeMargins).-
The properties previously named
NodeHaloshave been renamed toNodeMarginsfor the following classes:AlignmentStageData,CircularLayoutData,CompactDiskLayoutData,ComponentLayoutData,RadialGroupLayoutData,RecursiveGroupLayoutData,HierarchicalLayoutData(formerlyHierarchicLayoutData),GenericLabelingData(formerlyLabelingData),OrganicLayoutData,OrthogonalLayoutData,ClearAreaLayoutData,FillAreaLayoutData,PartialLayoutData,RadialLayoutData,CurveRoutingStageData,TabularLayoutData,EdgeRouterData,RadialTreeLayoutData(formerlyBalloonLayoutData),TreeLayoutData. -
Renamed
AsIsLayerer.NodeHalotoFromSketchLayerAssigner.NodeMargin. -
Renamed
TemporaryGroupDescriptor.Haloto Margins. -
Renamed
NodeHalo.NodeHaloDpKeytoLayoutKeys.NodeMarginDataKey.
-
The properties previously named
-
Renamed
LayoutExecutor.TargetBoundsInsetstoTargetBoundsPadding. -
Renamed
GroupingKeys.GroupNodeInsetsDpKeytoGroupNodePaddingDataKeyand moved the key toLayoutKeys. -
Renamed
GroupingKeys.MinimumNodeSizeDpKeytoLayoutKeys.MinimumGroupNodeSizeDataKey. -
Renamed
InsetsGroupBoundsCalculator.DefaultInsetstoGroupBoundsCalculator.DefaultPaddingandInsetsGroupBoundsCalculator.ConsiderNodeHalostoGroupBoundsCalculator.ConsiderNodeMargins. -
Renamed
TemporaryGroupDescriptor.Insetsto Padding. -
The
FamilyTreeLayoutclass has been removed. -
Removed the
LayoutGraphUtilitiesclass. The newEdge.ResetPathmethod replacesLayoutGraphUtilities.ResetPathmethod. The newParallelEdgeRouter.RouteEdgesParallelmethod replacesLayoutGraphUtilities.RouteEdgesParallelmethod. -
Methods
LayoutGraphUtilities.GetBoundingBoxwere combined to one more general, moved toLayoutGraphclass and made an instance method. -
Renamed
AbortHandlertoLayoutAbortController. -
The
MaximumDurationproperty is renamed toStopDurationin all public API usages. -
StopDurationsthat were of type long are now of typeTimeSpan. -
StopDurationsnow affect pre-and post-processing steps defined directly on the layout algorithms, as opposed to only the core algorithm. -
The
LayoutAbortController(formerlyAbortHandler) is no longer available as a property onLayoutDataclasses but only on theLayoutExecutor. -
Static methods on
LayoutAbortController(formerlyAbortHandler) likeGetFromGraphhave been removed since the handler instance can easily be accessed via theLayoutGraphContextwhen working withLayoutGraph. -
The default values of properties
LayoutAbortController.StopDurationandLayoutAbortController.CancelDurationhas been changed fromTimeSpan.ZerotoTimeSpan.MaxValue. Previously,Zerowas interpreted as unlimited time, which is not the case anymore. -
The default value of the algorithm properties
RankAssignment.MaximumDurationandNodeAggregation.MaximumDuration(now calledStopDuration) has been changed fromTimeSpan.ZerotoTimeSpan.MaxValue. Zero is no longer interpreted as an unrestricted running time but is the shortest possible time. -
Renamed
BorderLine.CreateMintoCreateMinimum. -
Renamed
BorderLine.CreateMaxtoCreateMaximum. -
Removed the
YPointPathclass. Instead of this class an array or more generally anIEnumerableof typePointD[] is now used in API members.-
Changed value to of
HierarchicLayout.AlternativeEdgePathDpKey,ClearAreaLayout.ExpandedNodeOriginalEdgePathDpKeyandGivenCoordinatesStage.EdgePathDpKeytoIEnumerable<.PointD> -
Changed
BusDescriptorpropertiesBusPointsandComputedBusPointsto typePointD[].
-
Changed value to of
-
Updated the constructor of
DpKeyBaseand subclasses to accept a single string parameter 'ID' for unique identification.-
Removed properties
DpKeyBase.DeclaringTypeandDpKeyBase.Name. -
Made
DpKeyBaseclass abstract.
-
Removed properties
-
Renamed
GraphLayoutLineWrappertoLineWrappingStage. -
Renamed
HideGroupsStagetoGroupHidingStage. -
Renamed
TemporaryGroupNodeInsertionStagetoTemporaryGroupInsertionStageand the respective data class fromTemporaryGroupNodeInsertionDatatoTemporaryGroupInsertionData. -
Renamed
BorderLineSideto Side, moved to namespace Layout and renamed its values:NorthtoSide.Top,EasttoSide.Right,SouthtoSide.Bottom, andWesttoSide.Left. -
Moved
BorderLineandBorderLineSegmentto namespace Layout. -
The methods
PortCalculator.CalculatePortsandPortCalculator.EqualsEpshave been removed. -
The following methods have been removed from the
ReverseEdgesStage:ReverseEdgesStage.FindReversedTreeEdges,ReverseEdgesStage.ReverseEdgeandReverseEdgesStage.ReverseEdges. -
The
HandleNaNCoordinatesStagehas been removed. -
LayoutMultiplexerhas been removed. The features ofComponentLayout(ComponentLayoutDataKey) orRecursiveGroupLayout(GroupNodeLayoutDataKey) can be used instead. -
Merged
MinimumSizeGroupBoundsCalculatorandInsetsGroupBoundsCalculatorinto the newGroupBoundsCalculatorclass. -
Renamed
MirrorModestoMirroredOrientationsandOrientationLayout.MirrorModetoMirroredOrientations. -
The API names to define routing styles throughout the layout algorithms have been streamlined and made more
consistent. Properties on layout algorithms have all been renamed to
EdgeRoutingStyleand those on edge-specific classes have been renamed toRoutingStyle.-
The
Polyline.EdgeRoutingStyleenum has been renamed toRouter.RoutingStyle. -
The
Tree.EdgeRoutingStyleenum has been renamed toSingleLayerSubtreePlacerRoutingStyle. -
The
LayeredRoutingStyleenum has been renamed toLevelAlignedSubtreePlacerRoutingStyle. -
The
Radial.EdgeRoutingStrategyenum has been renamed toRadial.RoutingStyle. -
The
Partial.EdgeRoutingStrategyenum has been renamed toPartial.RoutingStyle. -
The
Hierarchic.EdgeRoutingStyleenum has been renamed toHierarchical.RoutingStylewhile the oldRoutingStyleclass has been renamed toRoutingStyleDescriptor.
-
The
-
Removed the
GraphTransformerclass; use factory methods fromLayoutTransformationsclass instead to create stages that apply transformation operations on aLayoutGraph. -
The
CopiedLayoutGraphclass was removed from the API. To create a copy of a layout graph, the new factoryLayoutGraph.CreateCopymethod may be used. -
LayoutGraphHider: Method names have been standardized for consistency. Collection parameters and return values are now of typeIEnumerable. Methods with non-nullable parameters will now throw an exception if passednullvalues. -
Renamed
EdgeBundlingStagetoBundledEdgeRouter. -
The classes
FixPortLocationStageandFixPortLocationStageDatahave been removed from the library. To correct the port locations after applying a layout use thePortPlacementStageclass. -
PortPlacementStage.PathCorrectionhas been replaced byPortPlacementStage.RouteCorrectionPolicyof enum typeRouteCorrectionPolicy. -
The utility
PortConstraintConfiguratorclass has been removed. -
The classes
ChannelEdgeRouter,OrthogonalPatternEdgeRouterandOrthogonalSegmentDistributionStagehave been removed from the library. Their functionality is superseded by theEdgeRouterrouting algorithm.-
To configure the
EdgeRouterto generate a style that is similar to the removedChannelEdgeRouter, set theStopDurationproperty to zero and use the predefined penalty configurationEdgeRouterCosts.LowQuality. It is however not compatible with advanced features like integrated edge label placement.
-
To configure the
-
Removed
NormalizeGraphElementOrderStage. UseNodeComparisonandEdgeComparisonofLayoutExecutorinstead. -
The
SnapOuterPortsToNodeBorderStageclass has been removed. -
The
CompositeLayoutStageclass has been removed. If a complex composition of layout stages is required, the newLayoutStageStackclass can be used instead. To get anILayoutAlgorithmthat is then applied likeCompositeLayoutStagewas before,LayoutStageStack.LinkCoreLayoutsmethod must be called. -
The
BufferedLayoutclass has been removed. To apply a layout algorithm on a copy of aLayoutGraphinstance useLayoutGraph.CreateCopymethod to get a copy, then apply the layout on it and, finally, write back the result usingLayoutGraphCopyData.CommitLayoutToOriginalGraph. -
The
AbortHandler.CheckFailedproperty has been removed. To achieve the same functionality, theLayoutAbortController(new name of theAbortHandler) can be subclassed, overriding itsCheckmethod which allows to detect calls to that method. -
The
OrientationLayoutclass has been renamed toOrientationStage.-
Furthermore, the following methods have been removed from that class:
IsOrientationMirrored, Transform,PrepareTransform,CompleteTransform,CreateOrientedNodeHalo,CreateOrientedInsetsandCreateOrientedNodeSize.
-
Furthermore, the following methods have been removed from that class:
-
The port-related properties of the layout data classes (
SourcePortGroupIds,TargetPortGroupIds,SourcePortCandidates,TargetPortCandidates) have been moved to a sub-data accessible via the propertyPorts. -
Removed public methods
HideGroupNodesandUnhideGroupNodesofGroupHidingStage. -
Removed
LayoutKeys.NodeIdDpKeyandLayoutKeys.EdgeIdDpKey. -
The
GraphDpKeyclass was replaced byValueDataKey. -
The
TemporaryGroupDescriptorused byTemporaryGroupInsertionStageclass to define temporary group nodes now does not allow that propertiesInsets,MinimumSizeandMargins(formerlyHalo) arenullanymore. Previously this was the default which is nowInsetsD.Empty,SizeD.EmptyandInsetsD.Empty, meaning that the behavior does not change. -
Removed
SplitEdgeStage. -
Removed the classes
PartitionLayoutandPartitionLayoutData. -
Renamed
BendConvertertoBendSubstitutionStage. -
GraphPartitionManageris removed,LayoutGraphHiderprovides the same functionality. -
PortCalculator,IIntersectionCalculator, andIntersectionCalculatorKeyshave been removed. Instead, theLayoutExecutor.PortAdjustmentPolicyproperty should be set to a suitable value. -
The
OrientationLayout.HorizontalOrientationproperty has been removed. To check for a horizontal orientation, check if Orientation property equalsLayoutOrientation.LeftToRightorLayoutOrientation.RightToLeft. -
Renamed
GivenCoordinatesStagetoGivenCoordinatesLayout. -
Renamed
GivenCoordinatesStageDatatoGivenCoordinatesLayoutData. -
Removed the look-up keys
GroupingKeys.GroupDpKey,GroupingKeys.NodeIdDpKeyandGroupingKeys.ParentNodeIdDpKeywhich were necessary to define grouping information forLayoutGraphinstances. This can now be achieved via the helperLayoutGraphGroupingclass or directly via instance methods such asLayoutGraph.SetIsGroupNode. -
The public constructors of
ItemMappingandItemCollectionhave been removed. Instead the instances returned by theLayoutDataproperties should be used to configure theLayoutData. -
The optional
ItemMappingparameter ofGenericLayoutData.AddItemMappinghas been removed. -
The optional
ItemCollectionparameter ofGenericLayoutData.AddItemCollectionhas been removed. -
Renamed the
SubgraphLayoutclass toSubgraphLayoutStageand renamed the respective layout data class fromSubgraphLayoutDatatoSubgraphLayoutStageData. - Methods and and properties with "BoundingBox" in their name have been renamed to include "Bounds" instead.
Incompatible Behavior Changes
-
Method
LayoutGraph.ReverseEdgenow reverses the edge path too. To exchange only source and target of an edge useLayoutGraph.ChangeEdgemethod.
Layout Data
Incompatible API Changes
-
The value type of properties
HierarchicalLayoutData.LayerIndicesResult,HierarchicalLayoutData.SequenceIndicesResult,HierarchicalLayoutData.GivenLayersIndices,RadialLayoutData.LayerIdsandCircularLayoutData.CircleIdsResulthas been changed from number to a nullable number value. Null as value means that nothing was published for an item. -
The value type of the keys
HierarchicalLayout.LayerIndexResultDataKey,HierarchicalLayout.SequenceIndexResultDataKey,GivenLayersAssigner.LayerIndexDataKey,RadialLayout.LayerIdDataKeyandCircularLayout.CircleIdResultDataKeyhas been changed from number to a nullable number value. Null as value means that the nothing was published for an item. -
Properties of type
ItemMappinginLayoutDataclasses are now named using plural consistently. -
The type
SingleItem<was removed. Affected properties useTItem>ItemCollection<instead.TItem>
Hierarchical Layout
Incompatible API Changes
-
Renamed all types, methods, properties, and namespaces containing "hierarchic" to "hierarchical" including
HierarchicLayout, which is renamed toHierarchicalLayout. -
IPortConstraintOptimizerhas been renamed toIPortCandidateSelector, and its methods have been renamed fromOptimizeAfterLayeringandOptimizeAfterSequencingtoSelectAfterLayeringandIPortCandidateSelector.SelectAfterSequencing. -
PortConstraintOptimizerBasehas been removed. -
PortCandidateOptimizerhas been renamed toPortCandidateSelectorand its properties have been renamed:BackLoopPenaltytoBackLoopCost,CrossingPenaltytoCrossingCost, andOverUsagePenaltytoOverUsageCost. -
Renamed the
DefaultDrawingDistanceCalculator.NodeToNodeDistanceproperty toDrawingDistanceCalculator.NodeDistance. -
Renamed the
DefaultDrawingDistanceCalculator.EdgeToEdgeDistanceproperty toDrawingDistanceCalculator.EdgeDistance. -
Renamed the
HierarchicLayout.NodeToNodeDistanceproperty toNodeDistance. -
Renamed the
HierarchicLayout.EdgeToEdgeDistanceproperty toEdgeDistance. -
Renamed "Layerer" to "LayerAssigner" in the following types and members;
-
Renamed
ILayerertoILayerAssigner. -
Moved
HierarchicLayout.FixedElementsLayerertoHierarchicalLayoutCoreand renamed toFixedElementsLayerAssigner. -
Moved
HierarchicLayout.FromScratchLayerertoHierarchicalLayoutCoreand renamed toFromScratchLayerAssigner. -
Renamed
WeightedLayerertoWeightedLayerAssigner. -
Renamed
ConstraintIncrementalLayerertoConstraintIncrementalLayerAssigner. -
Renamed
MultiComponentLayerertoMultiComponentLayerAssigner. -
Renamed
MultiComponentLayerer.SingleComponentLayerertoSingleComponentLayerAssigner. -
Renamed
AspectRatioComponentLayerer.SingleComponentLayerertoSingleComponentLayerAssigner. -
Renamed
TopologicalLayerertoTopologicalLayerAssigner. -
Renamed
AspectRatioComponentLayerertoAspectRatioComponentLayerAssigner. -
Renamed
BFSLayerertoBfsLayerAssigner. -
Renamed
GivenLayersLayerertoGivenLayersAssigner. -
Renamed
HierarchicLayoutCore.CreateIncrementalLayerertoCreateIncrementalLayerAssigner. -
Renamed
HierarchicLayoutData.BfsLayererCoreNodestoBfsLayerAssignerCoreNodes. -
Renamed
AsIsLayerertoFromSketchLayerAssigner.
-
Renamed
-
Renamed
GivenLayersLayerer.LayerIdDpKeytoLayerIndexDataKey. -
Renamed
HierarchicLayoutData.GivenLayersLayererIdstoGivenLayersIndices. -
Removed
HierarchicLayoutData.ConstraintIncrementalLayererAdditionalEdgeWeights. -
Renamed
AsIsSequencertoFromSketchSequencer. -
Renamed
LayerTypetoHierarchicalLayoutLayerType. -
Renamed
DefaultLayerSequencertoDefaultSequencer. -
Methods
ConstraintIncrementalLayerer.CheckConstraints,GivenLayersLayerer.Normalizehave been removed. -
The protected callback methods
GetLayerAlignmentandAssignNodesToSublayerhave been removed from theCoordinateAssignerclass (formerly calledSimplexNodePlacer). Furthermore, itsGetMinDistancemethod has been renamed toGetMinimumDistance. -
The
IDrawingDistanceCalculator.GetMinDistancemethod has been renamed toGetMinimumDistance. -
HierarchicalLayout.GridSpacing: made grid spacing behavior consistent across all layouts by throwing an exception for negative values. -
Renamed
Hierarchic.NodeDataTypetoHierarchicalLayoutNodeTypeand its valueNormaltoHierarchicalLayoutNodeType.Regular. -
Renamed
Hierarchic.EdgeDataTypetoHierarchicalLayoutEdgeTypeand its valueNormaltoHierarchicalLayoutEdgeType.Regular. -
Renamed
LayerType.NormaltoHierarchicalLayoutLayerType.Regular. -
Renamed
MergingPolicytoLayerMergingPolicy. -
Renamed
RankingPolicytoLayerRerankingPolicyandTopologicalLayerer.RankingPolicytoRerankingPolicy. -
Renamed
WeightHeuristictoSequencerWeightHeuristic. -
Names containing
PortBorderGapwere renamed to now containBorderToPortGapRatio. -
Renamed
EdgeLayoutDescriptortoHierarchicalLayoutEdgeDescriptor. -
Renamed
HierarchicLayout.EdgeLayoutDescriptortoDefaultEdgeDescriptor. -
Renamed and moved
HierarchicLayoutCore.EdgeLayoutDescriptorDpKeytoHierarchicalLayout.EdgeDescriptorDataKey. -
Renamed
HierarchicLayoutData.EdgeLayoutDescriptorstoEdgeDescriptors. -
Renamed
NodeLayoutDescriptortoHierarchicalLayoutNodeDescriptor. -
Renamed
HierarchicLayout.NodeLayoutDescriptortoDefaultNodeDescriptor. -
Renamed and moved
HierarchicLayoutCore.NodeLayoutDescriptorDpKeytoHierarchicalLayout.NodeDescriptorDataKey. -
Renamed
HierarchicLayoutData.NodeLayoutDescriptorstoNodeDescriptors. -
Replaced
INodeDatainterface withHierarchicalLayoutNodeContextclass.-
Renamed
INodeData.GroupIdtoHierarchicalLayoutNodeContext.EdgeGroupId. -
Removed the
INodeData.ParentGroupNodeproperty.
-
Renamed
-
Replaced
IEdgeDatainterface withHierarchicalLayoutEdgeContextclass.-
IEdgeData.Typeis read-only on the newHierarchicalLayoutEdgeContext. -
The following
IEdgeDataproperties now offer read and write access on the newHierarchicalLayoutEdgeContext:SourceGroup,TargetGroup,SourcePortGroup,TargetPortGroup,SourcePortCandidates,TargetPortCandidates,Thickness,CrossingCost,CriticalEdgePriority,SourcePortAlignment,TargetPortAlignment. -
Renamed
IEdgeData.SourcePortConstraintandTargetPortConstrainttoSelectedSourcePortCandidateandSelectedTargetPortCandidaterespectively. Bot properties now offer read and write access. -
Removed the
IEdgeData.Groupproperty.
-
-
Replaced
ILayerinterface withHierarchicalLayoutLayerclass. -
Renamed the
ILayer.Listproperty toHierarchicalLayoutLayerclass.Nodes. -
Replaced
ILayersinterface with a list ofHierarchicalLayoutLayerinstances accessible viaHierarchicalLayoutContext.Layersproperty.-
Methods
HierarchicalLayoutContext.InsertLayerandRemoveLayerare replacements for theILayers.InsertandILayers.Removemethods.
-
Methods
-
Replaced
IItemFactoryinterface withItemFactoryclass. Several of the factory methods have also been removed or renamed.-
CreateDummyEdgehas been renamed toCreateHelperEdge. -
CreateProxyNodehas been renamed toCreateSideProxyNodeandDestroyProxyNodetoDestroySideProxyNode. -
CreateSameLayerProxyhas been renamed toCreateSameLayerProxyEdgeandDestroySameLayerProxytoDestroySameLayerProxyEdge. -
SetTemporaryEdgeGroupshas been renamed toCreateGroupedEdgeContext. -
SetTemporaryCriticalEdgePriorityhas been removed. -
SetTemporaryCrossingCosthas been removed. -
SetTemporaryEdgeThicknesshas been removed. -
SetTemporaryPortConstrainthas been removed.
-
-
EdgeDataType.RedirectedGroupEdgehas been removed. -
Separated
HierarchicLayout.IncrementalHintsDpKeyinIncrementalNodeHintsDataKeyandIncrementalEdgeHintsDataKey. -
Separated enum
IncrementalHintinIncrementalNodeHintfor nodes andIncrementalEdgeHintfor edges. -
Separated
HierarchicLayoutData.IncrementalHintsinHierarchicalLayoutData.IncrementalNodesandHierarchicalLayoutData.IncrementalEdges.IncrementalNodesnow only allows for specifying the nodes that should be inserted incrementally during the layering phase. Additional options for incremental node insertion can be specified usingGenericLayoutData. -
Removed
GroupCompactionStrategy. -
Renamed
SimplexNodePlacer.GroupCompactionStrategytoGroupCompactionand changed its type to boolean. -
The
DefaultDrawingDistanceCalculator.OptimizeSwimlaneDistancesproperty has been removed. The behavior does not change and is the same as the old default where the property was disabled. OverrideDrawingDistanceCalculator.GetMinimumDistancemethod and assign zero to nodes that are in different rows/columns to get the same behavior as when previously enabling the property. -
Property
SimplexNodePlacer.SwimLaneCrossingWeighthas been renamed toLayoutGridCrossingWeight. Note that the class has been renamed toCoordinateAssigner. -
The
TypeBasedDrawingDistanceCalculatorclass has been removed. -
The classes
ILayeredComponentsMergerandDefaultLayeredComponentsMergerhave been removed. The functionality is integrated into theMultiComponentLayerer, which now offers a newMergingPolicyproperty and protected methodMergefor the case that a custom merging approach is required. -
The
HierarchicLayout.OrthogonalRoutingproperty has been removed. To specify orthogonal or other routing styles, the routing style on theHierarchicalLayoutEdgeDescriptormust be used instead. -
Renamed
IPortAllocatortoIHierarchicalLayoutPortAssigner. -
Renamed
DefaultPortAllocatortoHierarchicalLayoutPortAssigner. -
Properties
HierarchicLayout.RecursiveGroupLayeringandHierarchicLayout.CompactGroupsare combined intoHierarchicalLayout.GroupLayeringPolicy. -
BusDescriptoris renamed toGridComponentDescriptor. -
HierarchicLayout.BusDescriptorDpKeyis renamed toGridComponentDescriptorDataKey. -
HierarchicLayoutData.Busesis renamed toGridComponents. -
HierarchicLayoutData.BusRootOffsetsis renamed toGridComponentRootOffsets. -
NodeDataType.BusStructureDummyis renamed toGridComponentBusNode. -
Renamed
SimplexNodePlacer.BarycenterModetoSymmetryOptimizationStrategyand changed its type toSymmetryOptimizationStrategy. It now supports performing strong, weak and no additional symmetry optimization. -
Refactored the enum
HierarchicLayout.LayoutModeproperty into a booleanFromSketchModeproperty and removed theLayoutModeenum. -
The
ICandidateMatcherinterface has been removed. For an advanced customization of the port selection consider implementing a customIPortCandidateSelector. -
Moved
HierarchicLayout.StopAfterLayering/Sequencing toHierarchicalLayoutCore. -
The
ILayoutDataProviderinterface is removed and its functionality is moved toHierarchicalLayoutContext. -
The
ILayersinterface is moved to theHierarchicalLayoutContext, and methods that acceptedILayersas a parameter instead acceptHierarchicalLayoutContextnow. -
The
IItemFactoryinterface is moved to theHierarchicalLayoutContext, and methods that acceptedIItemFactoryas a parameter instead acceptHierarchicalLayoutContextnow. -
The obsolete extension methods
CreateLayerConstraintFactoryandCreateSequenceConstraintFactoryhave been removed fromHierarchicLayout. To specify layer and sequence constraints, useLayoutDatainstead. -
LayerConstraintDatano longer inherits fromLayoutData. -
SequenceConstraintDatano longer inherits fromLayoutData. -
NodeLayoutDescriptor.NodeLabelModewas removed. If node labels shall be considered by the layout algorithm, they are now considered during all phases. In particular, self-loops do not overlap node labels anymore. -
The
NodeLabelModeenum was removed. -
The
NodeLayoutDescriptorclass of theHierarchicLayoutalgorithm, which was renamed toHierarchicalLayoutNodeDescriptor, does no longer allow to specify the border-to-port gap ratios individually for each node side. TheBorderToPortGapRatioproperty now defines the value for all four node sides. -
Property
HierarchicLayoutData.SelfLoopCalculatorDatawas removed. Settings like minimum lengths for self-loop edges are specified via theHierarchicalLayoutEdgeDescriptorclass like for normal edges. -
The
SelfLoopCalculatorandSelfLoopCalculatorDataclasses was removed from the API. -
In the sub-data
SequenceConstraintDataof theHierarchicalLayoutDataPlaceBeforeandPlaceAfterwere replaced byPlaceInOrder. -
In the sub-data
LayerConstraintDataof theHierarchicalLayoutDataPlaceAboveandPlaceBelowwere replaced byPlaceInOrder. -
The
INodePlacerinterface of the hierarchic layout has been renamed toICoordinateAssigner. Its implementation has been renamed fromSimplexNodePlacertoCoordinateAssigner. -
The
HierarchicLayout.SeparateLayersproperty has been moved toCoordinateAssigner.SeparateLayers, since it has always only worked when using that implementation. -
The
IEdgeReverserinterface and theHierarchicLayoutCore.CreateEdgeReversermethod have been removed. -
The
GroupTranspositionproperty has been removed fromDefaultLayerSequencerclass. The Transposition property should now be used for groups too. -
The
HierarchicLayoutCoreclass is not a standalone layout algorithm anymore but now offers only access to more advanced features of theHierarchicLayoutclass.-
All public data keys were moved to the
HierarchicLayoutclass. - The protected API of both classes was reduced, but still even highly advanced customization are possible.
-
All public data keys were moved to the
-
The protected methods
DefaultPortAllocator.GetPortBorderGap,DefaultPortAllocator.GetPortBorderGapRatio, andDefaultPortAllocator.GetPortDistanceDeltawere removed. -
Removed members
HierarchicLayout.CreateLayerConstraintFactory,HierarchicLayoutData.LayerConstraintFactory,HierarchicLayout.CreateSequenceConstraintFactoryandHierarchicLayoutData.SequenceConstraintFactory. The factories are no longer required to define layering and sequence constraints.-
The recommended way is to use properties
HierarchicLayoutData.LayerConstraintsandHierarchicLayoutData.SequenceConstraints. -
For expert uses cases (e.g. algorithm customization), the low-level helper classes
LayoutGraphLayerConstraintsandLayoutGraphSequenceConstraintswere added.
-
The recommended way is to use properties
-
Removed the keys
HierarchicLayout.LayerConstraintsMementoDpKeyandHierarchicLayout.SequenceConstraintsMementoDpKey. -
Class
TopLevelGroupToSwimlaneStagehas been removed from the library.
Incompatible Behavior Changes
-
The
HierarchicalLayoutnow considers node labels by default. -
The
HierarchicalLayoutnow places edge labels by default using an integrated labeling algorithm. -
Changed the default edge routing style of the
HierarchicalLayoutclass from Polyline to Orthogonal.
Tree Layout
Incompatible API Changes
-
Renamed
TreeLayout.MultiParentAllowedtoAllowMultiParent. -
Renamed
TreeReductionStage.MultiParentAllowedtoAllowMultiParent. -
Renamed "NodePlacer" to "SubtreePlacer" in the following types and members:
-
Renamed the
DefaultNodePlacerclass toSingleLayerSubtreePlacer. -
Renamed the
DelegatingNodePlacerclass toSingleSplitSubtreePlacer. -
Renamed the
DoubleLineNodePlacerclass toDoubleLayerSubtreePlacer. -
Renamed the
FreeNodePlacerclass toFixedSubtreePlacer. -
Renamed the
GridNodePlacerclass toMultiLayerSubtreePlacer. -
Renamed the
GroupedNodePlacerclass toMultiSplitSubtreePlacer. The class now considers port grouping (useTreeLayoutData.Ports) to define how child nodes are split. -
Renamed the
LayeredNodePlacerclass toLevelAlignedSubtreePlacer. -
Renamed the
TreeLayout.DefaultNodePlacerproperty toDefaultSubtreePlacer. -
Renamed the
TreeLayoutData.DelegatingNodePlacerPrimaryNodesproperty toSingleSplitSubtreePlacerPrimaryNodes. -
Renamed the
TreeLayoutData.GridNodePlacerRowIndicesproperty toMultiLayerSubtreePlacerLayerIndices.
-
Renamed the
-
Renamed
ConnectorDirectiontoSubtreeConnectorDirection, and the valuesNorthtoSubtreeConnectorDirection.Up,EasttoSubtreeConnectorDirection.Right,SouthtoSubtreeConnectorDirection.Down, andWesttoSubtreeConnectorDirection.Left. -
Renamed the values of
ParentConnectorDirection:NorthtoParentConnectorDirection.Up,EasttoParentConnectorDirection.Right,SouthtoParentConnectorDirection.Down, andWesttoParentConnectorDirection.Left. -
Replaced
Tree.Matrixwith theSubtreeTransformenum and renamed constants:-
Matrix.DefaulttoSubtreeTransform.None. -
Matrix.MirHortoSubtreeTransform.FlipY. -
Matrix.MirVerttoSubtreeTransform.FlipX. -
Matrix.Rot90toSubtreeTransform.RotateLeft. -
Matrix.Rot180toSubtreeTransform.Rotate180. -
Matrix.Rot270toSubtreeTransform.RotateRight. -
Matrix.MirVertRot90toSubtreeTransform.RotateRightFlipY. -
Matrix.MirHorRot90toSubtreeTransform.RotateLeftFlipY.
-
-
Renamed
TreeLayoutData.OutEdgeComparerstoTreeLayoutData.ChildOrderand changed the types to Comparison function. -
Removed
TreeLayout.DefaultOutEdgeComparer. UseTreeLayoutData.ChildOrderinstead. Also removedNodeOrderComparerclass. -
Removed the
SimpleNodePlacerclass; useDefaultSubtreePlacerclass instead. -
Replaced
DefaultNodePlacer.ChildPlacementproperty with the newSingleLayerSubtreePlacer.Transformationproperty. The formerChildPlacement.HorizontalDownwardvalue now maps toSubtreeTransform.None,ChildPlacement.HorizontalUpwardtoSubtreeTransform.FlipY,ChildPlacement.VerticalToLefttoSubtreeTransform.RotateRight, andChildPlacement.VerticalToRighttoSubtreeTransform.RotateLeftFlipY. -
Renamed
RootAlignment.CenterOverChildrentoSubtreeRootAlignment.CenterOfChildren. -
Renamed
RootAlignment.LeadingtoSubtreeRootAlignment.Left,RootAlignment.TrailingtoSubtreeRootAlignment.Right,RootAlignment.LeadingOffsettoSubtreeRootAlignment.Leading, andRootAlignment.TrailingOffsettoSubtreeRootAlignment.Trailing. -
The
TreeComponentLayoutclass has been removed. -
Renamed
FillStyletoAspectRatioChildAlignmentPolicyandAspectRatioNodePlacer.FillStyletoChildAlignmentPolicy. -
The
AspectRatioTreeLayouthas been removed together withAspectRatioTreeLayoutData,RootPlacement, andSubtreeArrangement. Use theTreeLayoutwith theAspectRatioSubtreePlacerinstead. -
Replaced
TreeLayoutData.OutEdgeComparersproperty with new, more powerfulChildOrderproperty. -
The
TreeReductionStage.NonTreeEdgeLabelingAlgorithmproperty has been renamed toNonTreeEdgeLabeling. -
Remove methods
GetPortBorderGapandGetPortDistanceDeltafrom theDefaultPortAssignment(renamed toTreeLayoutPortAssigner) class. -
Removed the
NodePlacerBaseclass. ImplementISubtreePlacerinterface instead. -
Removed the method
PlaceSubtree(Node,ParentConnectorDirection) of former subclasses ofNodePlacerBaseclass. OverridePlaceSubtreemethod(IMapper<Node,SubtreeShape>,IMapper<Node,SubtreeShape>,LayoutGraph, Node) instead. -
Removed the
DetermineChildConnectormethod of former subclasses ofNodePlacerBaseclass. OverrideDetermineChildConnectorsmethod instead. -
Removed the methods
GetNodeShapeandGetSubtreeShapefrom former subclasses ofNodePlacerBaseclass. - Renamed all types, methods and properties containing "NodePlacer" to "SubtreePlacer".
-
The
DefaultPortAssignment.BorderGapToPortGapRatioproperty was renamed toBorderToPortGapRatio. -
Tree.PortAssignmentModevaluePortConstrainthas been removed. Port candidates are always considered if they are specified. -
Tree.PortAssignmentModevaluesDistributedEast,DistributedWest,DistributedNorth,DistributedSouthhave been replaced by valueDistributed. The side can be specified by usingTreeLayoutData.Ports. -
Tree.PortAssignmentMode.Nonehas been renamedTree.PortAssignmentMode.Center. -
TreeLayout.GetPortAssignmentcan no longer be overridden. To specifyIPortAssignmentstrategies per node,TreeLayoutData.PortAssignerscan be used. -
TreeLayout.GetNodePlacercan no longer be overridden. To specifyNodePlacerstrategies per node,TreeLayoutData.SubtreePlacerscan be used. -
The following methods of
TreeLayouthave been removed:-
ReverseEdges. -
GetRootsArray. -
GetOutEdgeComparer-TreeLayoutData.ChildOrdercan be used instead. -
CreateNodeShape-ModifyNodeShapecan be used instead to modify the shape. -
DirectTree-TreeLayoutData.TreeRootcan be used to accomplish the same result.
-
-
DefaultNodePlacer.CalculateParentConnectorhas been removed. Custom implementations can be inlined at the end ofPlaceSubtree. -
SubtreeShape.AddBoundsToShapeaccepts a singleRectDparameter instead of its deconstructed values. -
SubtreeShape.AssignValuesTohas been removed -CreateCopycan be used instead. -
The API of the node placer implementations has been simplified and improved. The
INodePlacerinterface was renamed toISubtreePlacer. - The class hierarchy of the various node placer implementations has been simplified. The rotatable base class implementation has been removed from the hierarchy.
-
Renamed
IPortAssignmenttoITreeLayoutPortAssigner. -
Renamed
DefaultPortAssignmenttoTreeLayoutPortAssigner. -
Renamed
TreeLayout.PortAssignmentDpKeytoPortAssignerDataKey. -
Renamed
TreeLayoutData.PortAssignmentstoPortAssigners. -
Renamed the property
RoutingStyle.PolylinetoSingleLayerSubtreePlacerRoutingStyle.StraightLineToChildConnector,RoutingStyle.Forkproperty toSingleLayerSubtreePlacerRoutingStyle.Orthogonal, andRoutingStyle.ForkAtRootproperty toSingleLayerSubtreePlacerRoutingStyle.OrthogonalAtRoot. -
Added
SingleLayerSubtreePlacerRoutingStyle.Polylineproperty which leads to a polyline routing style. -
The
ClassicTreeLayouthas been removed together with the enumsLeafPlacement,EdgeRoutingStyle, andPortStyle. TheTreeLayoutcan be used instead. -
The properties
TreeLayout.SourcePortConstraintDataAcceptorandTreeLayout.TargetPortConstraintDataAcceptorhave been removed. -
The properties
TreeLayout.SourceGroupDataAcceptor
andTreeLayout.TargetGroupDataAcceptorhave been removed. -
Removed the
TreeLayout.DefaultLeafPlacerproperty as well asLeafNodePlacerclass. -
DelegatingNodePlacernow implementsISubtreePlacerinstead ofIFromSketchNodePlacer. -
BusNodePlacernow implementsISubtreePlacerinstead ofIFromSketchNodePlacer. -
Renamed
IProcessortoISubtreePlacerProcessor. -
All layouts suitable for trees, such as
TreeLayout,RadialTreeLayout, now default to using theTreeReductionStageto temporarily remove non-tree edges from the graph during layout calculation. -
The
GridNodePlacer.AutomaticRowAssignmentproperty (now renamed toMultiLayerSubtreePlacer) was removed. The layers are now always automatically assigned if no layer indices are defined viaTreeLayoutData.MultiLayerSubtreePlacerLayerIndices. -
The
TreeLayout.graphfield has been removed. For customizations in theTreeLayoutthe graph is available whatsoever and can if required be queried from the node/edge items.-
Method
TreeLayout.LayoutRootnow has an additional parameter of typeLayoutGraphas its first argument.
-
Method
-
Removed the
LayeredNodePlacer.Idproperty (class was also renamed toLevelAlignedSubtreePlacer). The ID can still be provided via the constructor. Reading it later should never be necessary. -
The factory
TreeReductionStage.CreateStraightLineRoutermethod has been removed. The standalone routerStraightLineEdgeRouterclass should be used instead when straight-line edges are required.
Incompatible Behavior Changes
- Port candidates are always considered if they are specified.
-
The
TreeLayoutnow considers node labels by default. -
The
TreeLayoutnow places edge labels by default using an integrated labeling algorithm.
Orthogonal Layout
Incompatible API Changes
-
The
LayoutStyleenum (belonging to theOrthogonalLayout) has been renamed toOrthogonalLayoutMode. Furthermore, the new values are Strict (former Default),ForcedStraightLine(former Box) , and Relaxed (formerFixedMixed). The former values Uniform,FixedBox, and Mixed have been removed from the enum. -
The
OrthogonalLayoutproperties related to substructures have all been renamed to contain "substructure" in their name.ChainStyle,ChainSize,TreeStyle,TreeSize,TreeOrientation,CycleStyle,CycleSizeare now calledChainSubstructureStyle,ChainSubstructureSize,TreeSubstructureStyle,TreeSubstructureSize,TreeSubstructureOrientation,CycleSubstructureStyle,CycleSubstructureSize. -
The following properties have been removed from the
OrthogonalLayoutclass: Randomization,CrossingReduction,EdgeLengthReduction,OptimizePerceivedBendsandFaceMaximization. Use the newQualityTimeRatioproperty instead. -
Removed the
CompactOrthogonalLayoutclass. -
The
DirectedEdgesproperties ofOrthogonalLayoutDataandPartialLayoutDataare now both of typeItemMappingwith the nameEdgeOrientationand support floating-point values to also specify edges oriented against the main layout direction. -
EdgeDirectednessDpKeyon all supportingILayoutAlgorithms have been combined into a global data keyLayoutKeys.EdgeDirectednessDataKey. -
PartialLayout.DirectedEdgesDpKeyis renamed toEdgeOrientationDataKeyand now also allows specifying edges should be routed against the main layout orientation. -
Renamed
EdgeLayoutDescriptortoOrthogonalLayoutEdgeDescriptor. -
Renamed
OrthogonalLayout.EdgeLayoutDescriptortoDefaultEdgeDescriptor. -
Renamed
OrthogonalLayout.EdgeLayoutDescriptorDpKeytoEdgeDescriptorDataKey. -
Renamed
OrthogonalLayoutData.EdgeLayoutDescriptorstoEdgeDescriptors.
Incompatible Behavior Changes
-
The
OrthogonalLayoutnow considers node labels by default. -
The
OrthogonalLayoutnow places edge labels by default using an integrated labeling algorithm.
Edge Router
Incompatible API Changes
-
The
MonotonicPathRestrictionenum is now a flags enum and is calledMonotonicPathRestrictions. -
The
SelfLoopRouter.SmartSelfLoopPlacementproperty has been removed. It was enabled by default and the algorithm now always behaves like when it was enabled previously. To get all self-loops on the same node corner independently of other edges, theSelfLoopRoutercan be applied in a separate post-processing step where only self-loops are present in the graph (useSubgraphLayoutStage). -
Method
ParallelEdgeRouter.LayoutParallelEdgeswas renamed toRouteEdges. -
Renamed
ParallelEdgeRouter.RoutedParallelEdgesDpKeytoRoutedMultiEdgesResultDataKey. -
Renamed
ParallelEdgeRouter.FindAndHideParallelEdgestoFindAndHideMultiEdges. -
Renamed
ParallelEdgeRouterData.RoutedParallelEdgestoRoutedMultiEdgesResult. -
The
ParallelEdgeRouter.AbsJoinEndDistanceproperty has been renamed toAbsoluteJoinEndDistance. -
The
ParallelEdgeRouter.RelJoinEndDistanceproperty has been renamed toRelativeJoinEndDistanceFactor, and its default value now is 0. -
The
ParallelEdgeRouter.LineDistanceproperty has been renamed toEdgeDistance. -
The
SelfLoopRouter.LineDistanceproperty has been renamed toEdgeDistance. -
The
SelfLoopRouter.LayoutSelfLoopsmethod has been removed. To route the self-loop edges, theSelfLoopRouterclass should be applied to the graph. -
The
SelfLoopRouter.LayoutStyleproperty has been renamed toRoutingStyle. The respective enum type has been renamed toSelfLoopRoutingStyle. -
The
OrganicEdgeRouter.CreateNodeEnlargementStagemethod has been removed and is now replaced by the newAllowMovingNodesproperty. -
The
OrganicEdgeRouter.EdgeNodeOverlapAllowedproperty has been renamed toOrganicEdgeRouter.AllowEdgeNodeOverlaps. -
The
BusRouterclass and all API members related to it have been removed. For bus-style edge routing, useEdgeRouterinstead. -
Renamed the
CurveEdgeLayoutDescriptor.MinimumEdgeToEdgeDistanceproperty toMinimumEdgeDistance. -
Renamed the
EdgeLayoutDescriptor.MinimumEdgeToEdgeDistanceproperty (EdgeRouter) toMinimumEdgeDistance. -
Renamed the
PenaltySettings.MinimumEdgeToEdgeDistancePenaltyproperty toEdgeRouterCosts.MinimumEdgeDistanceCost. -
Renamed
Interval.MintoInterval.Minimum. -
Renamed
Interval.MaxtoInterval.Maximum. -
Renamed
OrthogonalInterval.MintoOrthogonalInterval.Minimum. -
Renamed
OrthogonalInterval.MaxtoOrthogonalInterval.Maximum. -
Replaced
EdgeRouter.EdgeComparerproperty of typeIComparerwithEdgeRouterData.EdgeProcessingComparisonof type Comparison function. -
The
EdgeRouter.IgnoreInnerNodeLabelsproperty has been removed from the API. Consideration is controlled viaEdgeRouter.NodeLabelPlacement. Inner labels of non-group are only ignored when choosing valueEdgeRouterNodeLabelPlacement.Ignore; labels of group nodes alone can be ignored when choosingEdgeRouterNodeLabelPlacement.IgnoreGroupLabels. -
The protected
EdgeRouter.CreateDefaultEdgeOrderComparermethod has been removed. UseEdgeRouterData.EdgeProcessingComparisoninstead. -
Refactored the API for customizing the
EdgeRouterclass.-
The classes/interfaces
PathSearch,PathSearchResult,CellSegmentInfo,EdgeInfo, Channel,ChannelBasedPathRouting,SegmentInfo,SegmentInfoBase,SegmentGroup,Router.Polyline.Alignment,DynamicObstacleDecomposition,IObstaclePartition,IPartition,GraphPartition,GraphPartitionExtensionAdapter,IDecompositionListener,IDynamicDecomposition,IEnterIntervalCalculatorandIGraphPartitionExtensionhave been removed. -
The
PartitionCell.CreateBorderIntervalmethod has been removed alongside with thePartitionCellBorderenum. -
The properties
EdgeCellInfo.EnterSegmentGroup,EdgeCellInfo.ExitSegmentGroupandEdgeCellInfo.CellSegmentInfoshave been removed. -
The properties
EdgeRouter.RegisteredPartitionExtensions,RegisteredPathSearchExtensionsand Partition have been removed, as well as methodsCreateObstacleDecomposition,CreatePathSearch,CreatePathSearchContext,ConfigurePathSearch,CreatePathRouting,CreateConfiguration,ConfigureGraphPartitionandCleanUpGraphPartition. -
The properties
PathSearchContext.PathSearchandPathSearchContext.PathSearchResulthave been removed. -
Added new methods
EdgeRouter.AddPathSearchExtensionandEdgeRouter.AddPartitionExtension. -
Added
PartitionExtensionclass as replacement forIGraphPartitionExtension. -
Added new
IRouterPartitioninterface as replacement ofIObstaclePartitionandIPartition. -
The Partition property has been added to
PathSearchConfigurationclass. -
The
Path.Lengthproperty has been renamed toPathSearchResult.CellEntranceCount.
-
The classes/interfaces
-
Renamed
ObstacletoRoutingObstacle. -
Renamed
PathtoPathSearchResult. -
Renamed
PathRequesttoPathSearchRequest. -
Renamed
EdgeLayoutDescriptortoEdgeRouterEdgeDescriptor. -
Renamed
CurveEdgeLayoutDescriptortoCurveRoutingEdgeDescriptor. -
Renamed
EdgeRouter.EdgeLayoutDescriptorDpKeytoEdgeDescriptorDataKey. -
Renamed
EdgeRouter.DefaultEdgeLayoutDescriptortoDefaultEdgeDescriptor. -
Renamed
EdgeRouter.GetEdgeLayoutDescriptortoGetEdgeDescriptor. -
Renamed
EdgeRouterData.EdgeLayoutDescriptorstoEdgeDescriptors. -
Renamed
PathSearchContext.CurrentEdgeLayoutDescriptortoCurrentEdgeDescriptor. -
Renamed
CurveRoutingStage.DefaultEdgeLayoutDescriptortoDefaultEdgeDescriptor. -
Renamed
CurveRoutingStage.CurveEdgeLayoutDescriptorDpKeytoEdgeDescriptorDataKey. -
Renamed
CurveRoutingStageData.EdgeLayoutDescriptorstoEdgeDescriptors. -
EdgeRouter.Gridhas been replaced byEdgeRouter.GridSpacing. -
The class
Polyline.Gridhas been removed. -
The
EdgeRouterand all its related classes have been moved from namespaceyWorks.Layout.Router.PolylinetoyWorks.Layout.Router. -
Class
PenaltySettingsandEdgeLayoutDescriptor.PenaltySettingsproperty where renamed toEdgeRouterCostsandEdgeRouterEdgeDescriptor.EdgeRouterCosts. -
The already obsolete properties
EdgeRouter.PolylineRouting,EdgeRouter.PreferredPolylineSegmentLengthandEdgeRouter.MaximumPolylineSegmentRatiohave been removed. They are replaced by respective properties on theEdgeRouterEdgeDescriptorclass. -
The
PolylineLayoutStageclass has been renamed toOctilinearRoutingStage. ItsPreferredPolylineSegmentLengthproperty has been renamed toPreferredOctilinearSegmentLength. -
The type of
IntermediateRoutingPointsproperty has been changed fromIListtoIEnumerable.
Incompatible Behavior Changes
-
The default of
ParallelEdgeRouter.RelativeJoinEndDistanceFactorhas changed from 0.1 to 0. -
The
EdgeRouternow considers node labels by default. -
The
EdgeRouternow places edge labels by default using a generic labeling algorithm.
Labeling
Incompatible API Changes
-
The
PreferredPlacementDescriptorclass has been renamed toEdgeLabelPreferredPlacement.-
The
IEdgeLabelLayout.PreferredPlacementDescriptorproperty has been removed. Instead, the preferred placement can be specified usingEdgeLabelPreferredPlacement.EdgeLabelPreferredPlacementDataKey.
-
The
-
Removed the interfaces
INodeLabelLayoutandIEdgeLabelLayout. Labels of theLayoutGraphare instead represented by typesNodeLabelandEdgeLabel. -
Removed
LayoutGraph.GetLabelLayout. Labels can instead be retrieved usingNode.LabelsandEdge.Labels. -
Removed the
ILabelLayoutFactoryclass. Labels can instead be created and removed usingLayoutGraph.AddLabelandLayoutGraph.Remove. -
Removed the interfaces
INodeLabelLayoutModel,IEdgeLabelLayoutModeland all implementations. To specify valid positions forGenericLabeling, the typesNodeLabelCandidatesandEdgeLabelCandidatesoffer methods for creating positions that correspond to the old model implementations. Candidates can be specified usingGenericLabelingData.NodeLabelCandidatesandGenericLabelingData.EdgeLabelCandidates. -
Summarized layout algorithm properties such as
ConsiderNodeLabels,ConsiderEdgeLabels,IntegratedNodeLabeling,IntegratedEdgeLabeling, andNodeLabelingPolicyas two propertiesNodeLabelPlacementandEdgeLabelPlacement. -
Removed
LabelLayoutTranslator,LabelLayoutData,LabelLayoutKeysand related classes. The behavior ofLabelLayoutDatacan be recreated usingNodeLabel.AbsolutePlacementandEdgeLabel.AbsolutePlacement. -
Removed properties
RemoveNodeOverlaps,RemoveEdgeOverlapsandEdgeGroupOverlapAllowedfromGenericLabeling. -
Introduced
GenericLabeling.QualityTimeRatioproperty providing the possibility of balancing runtime and quality. -
Added intersection information to
LabelCandidateclass, which provides means to compute profits and to mimic the behavior of the removed properties. -
Removed
MISLabelingBase.OptimizationStrategy. UseGenericLabeling.DefaultNodeLabelingCostsandGenericLabeling.DefaultEdgeLabelingCostsinstead. Additionally individual costs can now be set for each label, usingGenericLabelingData.NodeLabelingCostsandGenericLabelingData.EdgeLabelingCosts. -
Removed
LabelingBase.AutoFlipping. Automatically flipping labels right-side up is handled by the view, e.g.SmartEdgeLabelModel.AutoRotation. -
Removed the
IProfitModelinterface and propertiesLabelingBase.ProfitModelandMISLabelingBase.CustomProfitModelRatio. Custom weights for a label candidate can be set at creation of the candidate withNodeLabelCandidatesandEdgeLabelCandidates, or through a callback for each label usingGenericLabelingData.NodeLabelCandidateProcessorsandGenericLabelingData.EdgeLabelCandidateProcessors. -
Removed the classes
MISLabelingBaseandLabelingBase. -
Removed the following protected methods from
GenericLabeling:CreateEdges,AssignProfit,FoundLabelOverlap,FoundNodeOverlap,FoundEdgeOverlap,FoundHaloOverlap,FoundPartitionGridLineOverlap,FoundPartitionGridInsetOverlap,FoundPartitionGridInteriorOverlap. -
Made enums
LabelAngleOnRightSideRotationsandLabelAngleReferencesnon-flags enums. -
Removed the
LabelAngleOnRightSideOffsetsenum. -
Changed the
PreferredPlacementDescriptor.AngleOffsetOnRightSideenum property to theAddHalfRotationOnRightSidebool property. -
MISLabelingBase.ReduceAmbiguityis removed. Ambiguous label placements can instead be penalized usingLabelingCosts.AmbiguousPlacementCost. -
Removed the
GraphModelManager.LabelLayerPolicyproperty. Use the more specific propertiesNodeLabelLayerPolicy,EdgeLabelLayerPolicyandPortLabelLayerPolicyinstead. -
The
SandwichLabelModelhas been removed. It can be emulated using aCompositeLabelModelwith the top and bottom position of anExteriorNodeLabelModel. -
Renamed
LabelSideReferences.AbsoluteWithLeftInNorthtoAbsoluteWithLeftAbove. -
Renamed
LabelSideReferences.AbsoluteWithRightInNorthtoAbsoluteWithRightAbove. -
ILabelCandidateDescriptorand related interfaces have been removed. -
LayoutGraphAdapter: removedGetLabelCandidateDescriptorProviderandGetLabelCandidateDescriptor. -
Renamed
SliderModetoEdgeLabelSliderMode. -
Values of
DiscreteNodeLabelPositionshave been renamed:-
DiscreteNodeLabelPositions.Top,DiscreteNodeLabelPositions.TopLeft, ... have been renamed toTopInside,TopLeftInside, ... -
DiscreteNodeLabelPositions.North,DiscreteNodeLabelPositions.NorthWest, ... have been renamed toDiscreteNodeLabelPositions.Top,DiscreteNodeLabelPositions.TopLeft, ...
-
-
Values of
DiscreteNodeLabelPositionsenum have been renamed.-
InternalMasktoInside. -
EightPosMasktoDiscreteNodeLabelPositions.Outside. -
SidesMasktoSides. -
CornerMasktoCorners. -
Removed value
SandwichMask.
-
-
Removed
DescriptorWrapperLabelModel. -
The configuration
LabelingDataclass for theGenericLabelingalgorithm has been renamed toGenericLabelingDatato be more in line with otherLayoutDataimplementations.
Organic Layout
Incompatible API Changes
-
TreeSubstructureStyle.Balloonhas been renamed toRadialTree. -
Renamed
OrganicLayout.ClusterAsGroupSubstructureAllowedtoAllowClusterAsGroupSubstructure. -
Renamed
OrganicLayout.NodeEdgeOverlapAvoidedtoAvoidNodeEdgeOverlap. -
Renamed
OrganicLayout.NodeOverlapsAllowedtoAllowNodeOverlaps. -
The classes
OrganicRemoveOverlapsStageandShuffleLayouthave been removed from the library. To solve the task of overlap removal, theRemoveOverlapsStageclass is still available and the style previously generated byOrganicRemoveOverlapsStagecan be triggered via the policyOverlapRemovalPolicy.PreserveRelativeLocations. -
The
OrganicPartitionGridLayoutStageclass has been removed. -
The
RecursiveShuffleLayoutclass has been removed from the API. -
Renamed
GroupNodeMode.NormaltoGroupNodeHandlingPolicy.Free. -
Renamed
OrganicLayoutData.SourceGroupIdstoSubstructureSourceGroupIds.OrganicLayoutnow usesOrganicLayout.SubstructureSourceGroupIdDataKeyinstead ofLayoutKeys.SourceEdgeGroupIdDataKey. -
Renamed
OrganicLayoutData.TargetGroupIdstoSubstructureTargetGroupIds.OrganicLayoutnow usesOrganicLayout.SubstructureTargetGroupIdDataKeyinstead ofLayoutKeys.TargetEdgeGroupIdDataKey. -
Renamed the
OrganicLayout.GroupNodeModeDpKeyproperty toGroupNodeHandlingPolicyDataKey. -
The
OrganicLayoutnow configures theComponentLayoutby default, andSmartComponentLayoutwas removed. -
OrganicLayout.ConfigureComponentLayoutandDisposeComponentLayoutwere removed. To configure theComponentLayout, replace the instance of theComponentLayoutin theLayoutStageStackwith a suitably configured instance. -
Removed
ConstraintFactoryandOrganicLayout.CreateConstraintFactory. UseOrganicLayoutData.Constraintsinstead. -
OrganicConstraintData.AddFloatingBoundingBoxnow acceptsSizeDits deconstructed values. -
OrganicConstraintData.AddFloatingBoundingBoxnow acceptsRectDits deconstructed values. -
OrganicLayout.ConsiderNodeSizeswas removed. TheOrganicLayoutnow always considers node sizes. -
OrganicConstraintDatano longer inherits fromLayoutData. -
The
OutputRestrictionclass and the associated properties have been renamed toShapeConstraint. -
Removed the
ClusterNodesproperty fromOrganicLayout. It is replaced byClusteringPolicyproperty. To disable the clustering, specifyClusteringPolicy.None. To enable it choose one of the available other policies. -
Removed the
ClusteringQualityproperty fromOrganicLayout. UseQualityTimeRatioinstead. -
The
OrganicLayoutclass no longer offers valueClusteringPolicy.UserDefined. Now, cluster IDs provided by users viaOrganicLayoutData.ClusterIdsproperty or data keyOrganicLayout.ClusterIdDataKeyare always considered first. If none are defined, the specifiedOrganicLayout.ClusteringPolicyis considered. -
The
ClassicOrganicLayoutclass has been removed. It is superseded by the more powerfulOrganicLayoutalgorithm that should be used instead.
Incompatible Behavior Changes
-
The
OrganicLayoutnow considers node labels by default. -
The
OrganicLayoutnow places edge labels by default using a generic labeling algorithm. -
The default style of the
OrganicLayout'sComponentLayoutis changed toPackedCircle. -
The
OrganicLayoutnow always considers node sizes.
Interactive Organic Layout
Incompatible API Changes
-
The
InteractiveOrganicLayoutDataclass has been added. It handles the initial settings per node and edge. -
The classes
InteractiveOrganicNodeHandleandInteractiveOrganicEdgeHandlehave been added. They handle the settings per node and edge while the algorithm runs. -
The properties, getters, and setters on
InteractiveOrganicLayoutthat concern settings for individual items have been moved toInteractiveOrganicLayoutDataor the handles as appropriate. -
The
InteractiveOrganicLayout.AddStructureUpdatemethod has been removed. -
The methods
InteractiveOrganicLayout.CommitPositionsandCommitPositionsSmoothlyhave been combined as theInteractiveOrganicLayoutData.UpdateNodeCentersmethod. -
The
InteractiveOrganicLayout.OutputRestrictionproperty has been renamed toShapeConstraint. -
The
InteractiveOrganicLayout.PreferredEdgeLengthproperty has been renamed toDefaultPreferredEdgeLength. -
The
InteractiveOrganicLayout.SyncStructuremethod has been removed.
Circular Layout
Incompatible API Changes
-
Renamed the
ExteriorEdgeLayoutDescriptor.EdgeToEdgeDistanceproperty toCircularLayoutExteriorEdgeDescriptor.EdgeDistance. -
The type of the
CircularLayout.MaximumDeviationAngleproperty has been changed to double. -
Renamed
CircularLayout.LayoutStyletoCircularLayout.PartitioningPolicy. -
Renamed
Circular.LayoutStyletoCircular.PartitioningPolicy. -
Removed the enum value
LayoutStyle.CustomGroups. If custom partitions are specified usingCircularLayoutData.Partitions, they are respected by theCircularLayoutautomatically. -
The
INodeSequencerclass has been removed from the API. Use the newCircularLayoutData.NodeComparisonproperty to specify custom node orders. -
The
CircularLayout.LayoutStyleproperty has been renamed toPartitioningPolicyto better reflect the fact that it controls how nodes are partitioned. The corresponding enum has also been renamed from toPartitioningPolicy. -
Renamed
EdgeLayoutDescriptortoCircularLayoutEdgeDescriptor. -
Renamed
CircularLayout.DefaultEdgeLayoutDescriptortoEdgeDescriptor. -
Renamed
ExteriorEdgeLayoutDescriptortoCircularLayoutExteriorEdgeDescriptor. -
Renamed
CircularLayout.ExteriorEdgeLayoutDescriptortoExteriorEdgeDescriptor. -
The
SingleCycleLayouthas been removed. TheCircularLayoutwithPartitioningPolicyset toSingleCyclecan be used instead. -
CircularLayout.SingleCycleLayouthas been replaced byCircularLayout.PartitionDescriptor. -
CircularLayout.DefaultEdgeLayoutDescriptorhas been renamed toEdgeDescriptor. -
CircularLayout.BalloonLayouthas been renamed toBackboneLayout. -
Removed the enum value
EdgeRoutingPolicy.MarkedExterior. To manually select which edges should be routed externally, use theCircularLayoutData.ExteriorEdgesproperty instead.
Incompatible Behavior Changes
-
The
CircularLayoutnow considers node labels by default. -
The
CircularLayoutnow places edge labels by default using a generic labeling algorithm. -
The default style of the
CircularLayout'sComponentLayoutis changed toPackedCircle. -
PartitionDescriptor.InitialAngleis measured in degrees rather than radians.
Radial Layout
Incompatible API Changes
-
Radial.NodeInfois renamed toRadialLayoutNodePlacementResult. -
The read/write
CenterNodesDpKeyproperty from theRadialLayoutclass has been removed. It was replaced by the static read-only keyRadialLayout.CenterNodesDataKeythat must now be used instead to mark the custom center nodes. -
Renamed the
RadialLayout.MinimumNodeToNodeDistanceproperty toMinimumNodeDistance. -
Renamed the
RadialLayout.MinimumEdgeToEdgeDistanceproperty toMinimumEdgeDistance. -
Renamed
Radial.LayeringStrategytoRadialLayeringStrategy. -
Replaced
ItemMappingOutEdgeComparerswithChildOrderDataChildOrder. -
Replaced properties
RadialLayoutData.NodeComparablesandRadialLayoutData.OutEdgeComparerswith new, more powerfulChildOrderproperty. -
Removed the enum value
Radial.LayeringStrategy.UserDefined. Custom layers are now always used if defined viaRadialLayoutData.LayerIdsproperty. -
Radial.NodeInfohas been renamed toRadialLayoutNodePlacementResult. -
Removed the enum value
CenterNodesPolicy.Custom. Custom center nodes are now always used if defined viaRadialLayoutData.CenterNodesproperty.
Incompatible Behavior Changes
-
Custom layers are now always used if defined via
RadialLayoutData.LayerIdsproperty. -
The
RadialLayoutnow considers node labels by default. -
The
RadialLayoutnow places edge labels by default using a generic labeling algorithm. -
The default style of the
RadialLayout'sComponentLayoutis changed toPackedCircle. -
The
RadialLayoutNodePlacementResult.SectorStartproperty is now interpreted in clockwise direction. -
Custom center nodes are now always used if defined via
RadialLayoutData.CenterNodesproperty.
Radial Tree Layout
Incompatible API Changes
-
BalloonLayouthas been renamed toRadialTreeLayout, andBalloonLayoutDatahas been renamed toRadialTreeLayoutData. -
The following members have been removed from
BalloonLayout(nowRadialTreeLayout): The fieldgraph, theBalloonLayoutclass.NodeInfo, the methodsGetInfo,CalculateChildArrangement,CalculateAngles,DetermineRoot, andSortChildNodes, theFromSketchModeproperty (use the new enum valueFromSketchofChildOrderingPolicyinstead), and theInterleavedModeproperty (useRadialTreeLayoutData.InterleavedNodesinstead). -
The following members of
BalloonLayout(nowRadialTreeLayout) have been renamed:PreferredChildWedgehas been renamed toPreferredChildSectorAngle,PreferredRootWedgehas been renamed toPreferredRootSectorAngle, and theGetPreferredChildWedgemethod has been renamed toGetPreferredChildSectorAngle. -
The
InterleavedModeenum has been removed. -
The enum value
InterleavedMode.MarkedNodeshas been removed. To define specific parents for interleaved placed child nodes use theRadialTreeLayoutData.InterleavedNodesproperty. -
The enum value
RootNodePolicy.SelectedRoothas been removed. A custom root node is now always used if defined viaRadialTreeLayoutData.TreeRootproperty. -
The types of the following properties have been changed to double:
PreferredChildSectorAngle,PreferredRootSectorAngle,MinimumEdgeLength, andMinimumNodeDistance. -
Renamed
RootNodePolicytoRootSelectionPolicy. -
Removed
BalloonLayout.Comparer. UseRadialTreeLayoutData.ChildOrderinstead. -
Replaced layout data
OutEdgeComparerproperty withChildOrderDataChildOrder. -
Replaced
BalloonLayoutData.OutEdgeComparerproperty with new, more powerfulChildOrderproperty (class is renamed toRadialTreeLayoutData).
Incompatible Behavior Changes
- The compactness factor is now interpreted differently. Larger values result in more compact drawings. Its range has been changed to [0, 1].
-
The from-sketch option of
RadialTreeLayoutsorts like before but no longer takes precedence over orders specified with theRadialTreeLayoutDatapropertiesChildOrderorNodeTypes. -
The
RadialTreeLayoutnow considers node labels by default. -
The
RadialTreeLayoutnow places edge labels by default using an integrated labeling algorithm. -
The default style of the
RadialTreeLayout's (formerlyBalloonLayout's)ComponentLayoutis changed toPackedCircle.
Radial Group Layout
Incompatible API Changes
-
Renamed
CactusGroupLayout.GroupSizingPolicytoRadialGroupLayout.GroupSizePolicy. -
Replaced
CactusGroupLayout.NodeComparerproperty of typeIComparerwithRadialGroupLayoutData.ChildNodeComparisonof type Comparison function. -
The
CactusGroupLayouthas been renamed toRadialGroupLayout, and theCactusGroupLayoutDatahas been renamed toRadialGroupLayoutData. -
Property
PreferredRootWedgehas been renamed toPreferredRootSectorAngle.
Incompatible Behavior Changes
-
The
RadialGroupLayoutnow places edge labels by default using a generic labeling algorithm. -
The default of the
PreferredRootSectorAngleproperty has been changed from 180 to 360. -
The default style of the
RadialGroupLayout's (formerlyCactusGroupLayout's)ComponentLayoutis changed toPackedCircle.
Series-parallel Layout
Incompatible API Changes
-
Renamed the
SeriesParallelLayout.MinimumNodeToNodeDistanceproperty toMinimumNodeDistance. -
Renamed the
SeriesParallelLayout.MinimumEdgeToEdgeDistanceproperty toMinimumEdgeDistance. -
Removed
SeriesParallelLayout.DefaultOutEdgeComparer. UseSeriesParallelLayoutData.ChildOrderinstead. Also removedDefaultOutEdgeComparerclass. -
Replaced
SeriesParallelLayoutDataproperty .OutEdgeComparerswith new, more powerfulChildOrderproperty. -
The
GeneralGraphHandlingproperty was removed.SeriesParallelLayoutnow handles general graphs by default. -
The
DefaultPortAssignment.BorderGapToPortGapRatioproperty was renamed toBorderToPortGapRatio. -
Remove methods
GetPortBorderGapandGetPortDistanceDeltafrom theDefaultPortAssignmentclass. -
The
SeriesParallelLayout.NonSeriesParallelEdgeLabelingAlgorithmproperty has been renamed toNonSeriesParallelEdgeLabeling. -
Renamed
EdgeLayoutDescriptortoSeriesParallelLayoutEdgeDescriptor. -
Renamed
SeriesParallelLayout.DefaultEdgeLayoutDescriptortoDefaultEdgeDescriptor. -
Renamed
SeriesParallelLayout.EdgeLayoutDescriptorDpKeytoEdgeDescriptorDataKey. -
Renamed
SeriesParallelLayoutData.EdgeLayoutDescriptorstoEdgeDescriptors. -
Renamed the
SeriesParallelLayout.VerticalAlignmentproperty toParallelSubgraphAlignment. -
The combinations of the enums
ForkStyleandPortAssignmentModehave been integrated into thePortAssignmentModeenum, and theForkStyleenum has been removed. -
DefaultPortAssignment.ForkStylehas been removed. -
Renamed
IPortAssignmenttoISeriesParallelLayoutPortAssigner. -
Renamed
DefaultPortAssignmenttoSeriesParallelLayoutPortAssigner. -
Renamed
SeriesParallelLayout.PortAssignmentDpKeytoPortAssignerDataKey. -
Renamed
SeriesParallelLayoutData.PortAssignmentstoPortAssigners.
Incompatible Behavior Changes
-
SeriesParallelLayoutnow handles general graphs by default. -
The
SeriesParallelLayoutnow considers node labels by default. -
The
SeriesParallelLayoutnow places edge labels by default using an integrated labeling algorithm.
Compact Disk Layout
Incompatible Behavior Changes
-
The
CompactDiskLayoutnow considers node labels by default. -
The
CompactDiskLayoutnow places edge labels by default using a generic labeling algorithm.
Multi-page Layout
Incompatible API Changes
-
MultiPageLayoutResultis now an inner class ofMultiPageLayout. -
Renamed
GroupingPolicytoMultiPageGroupingPolicy. -
Renamed
Multipage.NodeTypetoMultiPageNodeTypeand its valueNormaltoMultiPageNodeType.Regular. -
Renamed
Multipage.EdgeTypetoMultiPageEdgeTypeand its valueNormaltoMultiPageEdgeType.Regular. -
The
EdgeBundleModesenum and the associated properties have been renamed toMultiEdgeConnectorPolicy. The enum values have been renamed toSeparate,ShareForSameDirectionandShare, respectively. The correspondingEdgeDataKeyhas been renamed toMultiEdgeConnectorIdDataKey(previouslyEdgeTypeDpKey). -
The
MultiPageLayout.CreateProxyReferenceNodesproperty has been renamed toUseProxyReferenceNodes. -
The
EdgeBundleModesenum has been renamed toMultiEdgeConnectorPolicyand converted from a flags enum to a regular enum. To manually select which multi-edges should be distinguished, use theMultiPageLayoutData.MultiEdgeConnectorIdsproperty. -
The properties
MultiPageLayout.EdgeBundleModeMask,MultiPageLayout.EdgeTypeDpKey, andMultiPageLayoutData.EdgeTypeshave been renamed toMultiPageLayout.MultiEdgeConnectorPolicy,MultiPageLayout.MultiEdgeConnectorIdDataKey, andMultiPageLayoutData.MultiEdgeConnectorIds. -
The public API of the
MultiPageLayoutclass has been changed.-
The
ILayoutCallbackinterface has been removed. The respectiveMultiPageLayout.LayoutCallbackproperty is now an Action delegate instead. Furthermore,MultiPageLayout.CalculateLayoutmethod has been removed, meaning the layout can and should only be started like all other algorithms (e.g. via theLayoutExecutororIGraph.ApplyLayout). -
The
IElementFactoryinterface and theDefaultElementFactoryclass have been removed. The replacement isMultiPageElementFactoryclass which can be accessed and modified usingMultiPageLayout.ElementFactoryproperty. -
The
MultiPageLayout.CreateElementFactorymethod has been removed. The factory can be get and set usingMultiPageLayout.ElementFactoryproperty. -
The
IElementInfoManagerinterface has been removed. -
The
LayoutContextclass of theMultiPageLayouthas been renamed toMultiPageLayoutContextand its properties Graph and Layout have been removed. -
The
INodeInfo,IEdgeInfo,INodeLabelInfo,IEdgeLabelInfointerfaces related toMultiPageLayouthave been removed. The data provided by them can now be retrieved via methods of theMultiPageLayoutContext(which is available also as property on theMultiPageLayoutResult). -
The callback methods
MultiPageLayout.RemoveConnectorPair,RouteRestoredEdgesandApplyIncrementalLayouthave been removed.
-
The
-
MultiPageLayoutResult.GetPageandPageCounthave been replaced byPageGraphs. -
MultiPageLayoutDatahandles the ID mapping automatically. Consequently, the explicit mappingsNodeIds,EdgeIds,NodeLabelIds, andEdgeLabelIdshave been removed. Original graph items can be obtained by callingMultiPageLayoutData.GetOriginalItem.
Partial Layout
Incompatible API Changes
-
Renamed
Partial.LayoutOrientationtoPartialLayoutOrientation. -
Removed the enum value
ComponentAssignmentStrategy.Customized. Custom components are now always used if defined withPartialLayoutData.ComponentIds,ClearAreaLayoutData.ComponentIdsorFillAreaLayoutData.ComponentIdsrespectively. -
The
PartialLayout.LayoutSubgraphmethod has been removed. -
The callback
ConfigureEdgeRoutermethod has been removed from classesPartialLayoutandClearAreaLayout. The router instance can be specified via thePartialLayout.EdgeRouterandClearAreaLayout.EdgeRouterproperties so that an additional configuration callback is not necessary.
Incompatible Behavior Changes
-
Custom components are now always used if defined with
PartialLayoutData.ComponentIds.
Tabular Layout
Incompatible API Changes
-
Replaced
TabularLayout.NodeComparerproperty of typeIComparerwithTabularLayoutData.FreeNodeComparisonof type Comparison function. -
Renamed
Tabular.LayoutPolicytoTabularLayoutMode. -
The
TabularLayoutclass now features its own data key (LayoutGridCellDescriptorResultDataKey) where it will publish cell IDs of nodes that it explicitly assigned to the cells. Previously it reused the common data keyPartitionGrid.PartitionCellIdDpKey. -
Renamed
NodeLayoutDescriptortoTabularLayoutNodeDescriptor. -
Renamed
TabularLayout.DefaultNodeLayoutDescriptortoDefaultNodeDescriptor. -
Renamed
TabularLayout.NodeLayoutDescriptorDpKeytoNodeDescriptorDataKey. -
Renamed
TabularLayoutData.NodeLayoutDescriptorstoNodeDescriptors.
Incompatible Behavior Changes
-
The
TabularLayoutnow considers node labels by default. -
The
TabularLayoutnow places edge labels by default using a generic labeling algorithm.
Component Layout
Incompatible API Changes
-
If
ComponentLayoutis used as a pre-processing step to apply a layout algorithm on multiple connected components, theStopDurationof that layout is divided appropriately over all components, instead of being applied once per component. -
The
IsolatedGroupComponentLayoutclass has been removed. -
Renamed
ComponentArrangementStyles.NonetoComponentArrangementStyle.KeepCenters. -
Removed the
ComponentArrangementproperty fromComponentLayout; use the newComponentArrangementStyle.Noneinstead to avoid arranging components. -
The
ComponentArrangementStylesenum has been renamed toComponentArrangementStyle, as it is no longer a Flags-Enum.-
Removed
ComponentArrangementStyles.Mask. -
Replaced
ComponentArrangementStyles.ModifierNoOverlapwithTryKeepCenters. -
Replaced
ComponentArrangementStyles.ModifierAsIswithComponentLayout.FromSketchMode.
-
Removed
-
Renamed
ComponentLayout.CalculateBoundstoCalculateComponentBounds. -
Renamed
ComponentLayout.SetOrigintoSetComponentLocation. -
Removed
ComponentLayout.ArrangeFieldsmethod. -
Simplified parameter lists of methods
ComponentLayout.ArrangeComponentsandComponentLayout.SetOriginto now accept instances of Component class.
Incompatible Behavior Changes
-
ComponentArrangementStyle.PackedCircleandComponentArrangementStyle.PackedRectanglenow consider the convex hulls of components to determine overlaps.
Tree Map Layout
Incompatible API Changes
-
Replaced
TreeMapLayout.NodeComparerproperty of typeIComparerwithTreeMapLayoutData.ChildNodeComparisonof type Comparison function. -
Removed the
NodeWeightComparerclass. -
Renamed
TilingPolicytoTilingStrategyandTreeMapLayout.TilingPolicytoTreeMapLayout.TilingStrategy.
Recursive Group Layout
Incompatible API Changes
-
RecursiveGroupLayout.NullLayoutis renamed toRecursiveGroupLayout.FixContentLayout. -
FixGroupLayoutStageis removed and its functionality is replaced byRecursiveGroupLayoutusingRecursiveGroupLayout.FixGroupLayoutfor all groups. -
The
RecursiveGroupLayoutclass now ignores empty group nodes by default (seeConsiderEmptyGroupsproperty). -
The signature of
IGroupBoundsCalculator.CalculateBoundsmethod was changed. The given children are now of typeIListEnumerable<Node>. -
The
GroupBoundsCalculatorimplementation now keeps the center of empty group nodes ifConsiderEmptyGroupsis enabled. -
Method
GroupBoundsCalculator.CalculateBoundsnow correctly considers the specified children. Previously, the given children were ignored and all graph elements were considered when calculating the group bounds.
Layout Grid
Incompatible API Changes
- Renamed all types, methods and properties containing "CellId" to "CellDescriptor".
-
Removed properties
OptimizeRowOrderandOptimizeColumnOrderfromPartitionGridDataclass. -
Removed the data key
PartitionGrid.PartitionGridDpKey. The keyLayoutGrid.LayoutGridCellDescriptorDataKeyis now the only data key which can be used to specify layout grids. -
Removed data key
RecursiveGroupLayout.GroupNodePartitionGridDpKey. The keyLayoutGrid.LayoutGridCellDescriptorDataKeyis now the only data key which can be used to specify layout grids. -
Renamed inset properties on classes
LayoutGridColumn(formerlyColumnDescriptor) andLayoutGridRow(formerlyRowDescriptor) to now be called padding (e.g.,LeftPaddinginstead ofLeftInset). -
The methods
PartitionGrid.PrepareOrientationChangeandPartitionGrid.FinalizeOrientationChangehave been removed. -
Removed properties
OriginalPositionandOriginalWidthfromLayoutGridColumnclass (formerlyColumnDescriptor). Use propertiesLayoutGridColumn.Position(formerlyComputedPosition) orLayoutGridColumn.Width(formerlyComputedWidth). -
Removed properties
OriginalPositionandOriginalHeightfromLayoutGridRowclass (formerlyRowDescriptor). Use propertiesLayoutGridRow.Position(formerlyComputedPosition) orLayoutGridRow.Height(formerlyComputedHeight). -
PartitionGridis renamed toLayoutGrid. This also affects the related classesPartitionGridData,GenericPartitionGridStage, andGenericPartitionGridStageData. -
Renamed
ColumnDescriptortoLayoutGridColumn&RowDescriptortoLayoutGridRow. -
Renamed
PartitionCellIdtoLayoutGridCellDescriptor. -
The
SwimlaneDescriptorclass has been removed from the API. UseLayoutGridclass (formerly calledPartitionGrid) instead, which is able to model one-dimensional and two-dimensional grids. -
The
PartitionGridLayoutStageclass has been removed. It is not necessary to manually add this stage, sinceHierarchicalLayoutcan supportLayoutGridout-of-the-box. -
Removed helper class
SwimlanesandLayout.SwimlaneRepresentative. -
Removed the
SwimlanesModeenum.
Other Layouts
Incompatible API Changes
-
Removed the
InterEdgeRoutingStyleenum. -
Renamed
CurveFittingLayoutStagetoCurveFittingStage. -
Renamed
FixNodeLayoutStagetoLayoutAnchoringStageandFixNodeLayoutDatatoLayoutAnchoringStageData. In addition:-
Renamed
FixPointPolicytoLayoutAnchoringPolicy. -
Renamed
FixNodeLayoutStage.FixedNodeDpKeytoNodeAnchoringPolicyDataKey. -
Renamed
CalculateFixPointtoCalculateAnchorPoint. -
Removed
FixNodeLayoutData.FixedNodes. Graph elements to anchor the graph on can be specified by setting the respectiveAnchoringPoliciesusingLayoutAnchoringStageData.
-
Renamed
Algorithms
Incompatible API Changes
-
Removed the Groups class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Renamed the Dendrogram class to
HierarchicalClusteringDendrogram. -
Renamed
ParallelEdges.FindParallelEdgestoLayoutGraphAlgorithms.FindMultiEdges. -
Renamed
Analysis.ComponenttoConnectedComponent. -
The
Algorithms.NodeAggregationclass has been renamed toLayoutGraphNodeAggregation, emphasizing that this class is intended for users working with theLayoutGraphAPI only.-
Furthermore, its member
NodeTypeDpKeyhas been removed. The replacement is keyLayoutKeys.NodeTypeDataKey. -
Also, its member
NodeCenterDpKeyhas been removed. Node centers are now directly read from theLayoutGraphinstance which must contain the coordinates of nodes if useful results should be generated.
-
Furthermore, its member
-
Removed the utility class
Sortingthat offered methods to get a sorted node array based on node degrees or another criterion. The functionality is written without this utility by first getting the array of nodes from the graph and then sorting it using standard built-in sorting utilities. -
Removed namespace
Algorithms.Util. The types are now in namespace Algorithms. -
Removed the
GraphConnectivityclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead. -
Removed the
IndependentSetsclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead. -
Removed the enum value
EuclideanSquaredfromDistanceMetricenum. Use enum value Euclidean instead which now calculates with squared values. -
Removed the
DistanceMetricenum ofKMeansClusteringclass. UseKMeansDistanceMetricenum instead. -
Removed the
AggregationPolicyenum ofNodeAggregationclass. UseAggregationPolicyenum instead. -
Removed the
ShortestPathsclass. Use corresponding methods ofLayoutGraphAlgorithmsclass instead (e.g.ShortestPath). - The Triangulator algorithm class has been removed.
-
Removed the
BfsDirectionenum. UseTraversalDirectioninstead. -
Removed the Intersections class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the
IntersectionAlgorithmclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead. -
Removed the Substructures class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the Trees class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the
NetworkFlowsclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead (e.g.MaximumFlow). -
Removed the
NodeOrdersclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead (e.g.TopologicalNodeOrder). -
Removed the Bipartitions class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the Cycles class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the
ParallelEdgesclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead. -
Removed the Transitivity class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
The
SpanningTreesclass has been removed. To compute a minimum spanning tree, useLayoutGraphAlgorithms.MinimumSpanningTreemethod. -
The
RankAssignmentsclass has been removed in favor of the singleLayoutGraphAlgorithms.SimplexRankAssignmentmethod that offers access to the rank assignment algorithm. -
The
GraphCheckerclass has been removed and most of its methods are now available onLayoutGraphAlgorithms. -
The
TreeAnalyzerclass has been removed. Use the more convenient and powerfulTreeAnalysisclass instead. -
Removed the Centrality class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the Bfs class. Use
LayoutGraphAlgorithms.Bfsinstead. -
Removed the Dfs class. Use
LayoutGraphAlgorithms.Dfsinstead.
Analysis
Incompatible API Changes
-
Renamed
GraphStructureAnalyzer.HasMultipleEdgestoHasMultiEdges. -
Renamed
GraphStructureAnalyzer.GetMultipleEdgestoGetMultiEdges. -
Renamed
AggregationInfotoNodeAggregationInfo. -
Renamed
AggregationInfo.ParentAggregationtoParentNodeAggregation. -
Renamed
NodeAggregation.AggregationPolicytoNodeAggregationPolicy. -
Renamed
NodeAggregation.AggregationtoAggregationPolicy. -
Renamed
DistanceMetrictoKMeansDistanceMetric. -
The
NodeAggregation.NodeTypeHandlingproperty has been renamed toNodeTypePolicy. -
The
NodeTypeHandlingPolicyenum has been renamed toNodeTypePolicy. -
Renamed
Analysis.ComponenttoConnectedComponent. -
Renamed
SubstructuretoSubstructureItems. -
Replaced enum
Algorithms.LinkagewithHierarchicalClusteringLinkage.
Collections
Incompatible API Changes
-
The
YList.ElementAtmethod was removed. -
Renamed
ICursor.PrevtoICursor.Previous. -
Renamed
ListCell.SucctoListCell.Next. -
Renamed
ListCell.PredtoListCell.Previous. -
Removed the
IsEmptymethod fromYListclass. TestYList.Countproperty for 0 instead. -
Removed the methods
SuccCellandPredCellfromYListclass. Use new propertiesListCell.NextandListCell.Previousinstead. -
Removed the methods
CyclicSucc,CyclicPred,ContainsAllandRetainAllfromYListclass. -
Removed the methods Succ and Pred from
ListCellclass. Use new properties Next and Previous instead. -
Removed the Peek method from
YListclass. Use First property instead.
Geometry
Incompatible API Changes
-
The
GeomUtilitiesclass has been renamed toGeometryUtilities. - Implicit and explicit conversion operators between yFiles geometry types and the platform geometry types have been removed.
-
Renamed the
GeomUtilities.FindRayIntersectionmethod toGetSegmentRayIntersection. -
Renamed the
GeomUtilities.FindEllipseLineIntersectionmethod toGetEllipseLineIntersection. -
Moved
Geom.Collinearmethod toGeometryUtilitiesclass and renamed toAreCollinear. -
Moved
Geom.CalcConvexHullmethod toGeometryUtilitiesclass and renamed toGetConvexHull. -
Moved the
Geom.CalcIntersectionmethod toGeometryUtilitiesclass and renamed toGetLineLineIntersection. -
Removed the
Geom.Projectionmethod. UsePointD.GetProjectionOnSegmentmethod instead. -
Removed the methods
DistanceToLineSegmentof Geom class. UsePointD.DistanceToSegmentmethod instead. -
Moved
IPlaneObjectandLineSegmentto namespaceyWorks.Geometry. -
The copy constructors on the
RectD,PointD, andSizeDclasses were removed. Use theToRectD,ToPointD, orToSizeDmethods respectively instead. -
All
Intersectsmethods of theGeneralPathclass are now calledPathIntersects. -
The
MayIntersectClipmethod of theGeneralPathclass is now calledPathMayIntersectClip. -
All
AreaContainsmethods of theGeneralPathclass now have an optionalflatteningToleranceparameter. -
The
IsEmptymethod of theGeneralPathclass was removed. Use theIsVisiblemethod or theCountproperty, instead. -
The
GetBoundsoverload of theGeneralPathclass that returns the approximate bounds for BΓ©zier segments is now calledGetApproximateBounds. -
Renamed the
LineSegment.XOffsetproperty toYIntercept. -
Renamed the
LineSegment.IsInXIntervallmethod toLineSegment.IsInXIntervalandLineSegment.IsInYIntervallmethod toLineSegment.IsInYInterval. -
Made
LineSegmentclass sealed. -
The
IRectangleinterface no longer implementsIPoint. You can get the top-left corner of a rectangle with itsGetTopLeftmethod. For usages of the dynamic behavior ofIPoint, like in a customIPositionHandler, we recommend to let theIPositionHandlerimplementIPoint, too. -
The
IMutableRectangleinterface no longer implementsIMutablePoint. When working with theMutableRectangleclass, use itsLocationproperty to get a dynamic point of the location.