Release Notes yFiles WPF Version 4.0
Version 4.0.0.1 is the latest minor release for yFiles WPF in the yFiles
WPF 4.0 major release series.
See the changelog for a list of all changes
in this and all other versions.
To learn about the new features in version 4.0, have a look at About yFiles WPF Version 4.
Below you will find the technical requirements and a list of all new features and improvements.
Technical Requirements
- Microsoft .NET 6.0 (or newer) or Microsoft .NET Framework 4.6.2 (or newer).
- A browser to view the HTML documentation.
- We recommend the use of a powerful IDE such as Microsoft Visual Studio or JetBrains Rider.
All changes
Version 4
This version brings a major overhaul of many parts of the API, resulting in a lot of incompatible changes. We have designed many functions to be simpler, more intuitive and more consistent and removed technical debt.
In addition, this release contains numerous new features, improvements, and bug fixes to all parts of the library.
For a tour of this release's highlights, have a look at the article about yFiles WPF 4.0.
If you are updating from an older version of yFiles WPF, have a look at the list of incompatible changes and at the more detailed description in the Migration Guide.
New Features, Improvements, and Bug Fixes
Categories: General Graph Controls Rendering Selection, Focus, Highlight Styles Interaction Label Editing Snapping Clipboard Folding View-Layout-Bridge Layout Hierarchical Layout Tree Layout Orthogonal Layout Edge Router Labeling Organic Layout Radial Tree Layout Series-parallel Layout Partial Layout Tabular Layout Component Layout Algorithms Analysis Geometry
General
New Features and Improvements
- The yFiles library now consists of one single assembly.
-
All uses of the
IListEnumerable<T>interface have been replaced by 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
-
The new
IGraph.GetEdgesBetweenmethod returns all edges between two ports or port owners. -
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 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
-
CanvasControlandGraphControlnow have a new scroll bar design, as well as new behavior if eitherHorizontalScrollBarPolicyorVerticalScrollBarPolicyis set toAuto. 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. -
yFiles now offers theming. Therefore, the following
ResourceKeyshave been added toCanvasControlclass:ThemeScaleKey,ThemeHandleOffsetKey,ThemeIndicatorOffsetKey,ThemeVariantKey,ThemePrimaryBrushKey,ThemeSecondaryBrushKey, andThemeBackgroundBrushKey.
Also, theThemeVariantenum has been added. -
The following
ResourceKeyshave been added to customize indicator visuals:,GraphControl.NodeSelectionStyleKey,GraphControl.LabelSelectionStyleKey,GraphControl.NodeFocusStyleKey,GraphControl.LabelFocusStyleKey,GraphControl.NodeHighlightStyleKey,GraphControl.LabelHighlightStyleKey,LabelPositionHandler.LabelCandidateStyleKey,MarqueeSelectionInputMode.MarqueeRectangleStyleKey,OverviewInputMode.OverviewRectangleStyleKey,TableEditorInputMode.ResizeStripeStyleKey,TableEditorInputMode.SelectedStripeStyleKey,TableEditorInputMode.DragSourceStripeStyleKey, andTableEditorInputMode.DropTargetStripeStyleKey. -
The new
CanvasControl.HorizontalScrollEventRecognizerproperty allows customizing switching from vertical to horizontal scrolling. -
Small scrollbar changes and the factor for scrolling with the mouse wheel (
MouseWheelScrollFactor) have been increased to allow for faster scrolling. -
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. -
Cursor changes are applied to
CanvasControl'sCanvasContentHostinstead of theCanvasControlinstance itself. As a result, child controls like scroll bars no longer need to guard against cursor changes of their parent control. However, interested parties have to subscribe to theCanvasContentHost.Cursorproperty to be notified of cursor changes instead of theCanvasControl.Cursorproperty. -
GraphControlnow usesGraphViewerInputModeas the defaultInputModefor basic graph exploration. -
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
CompoundKeyEventType.Typedhas been renamed toTextInputto follow platform conventions. -
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. -
Small scrollbar changes and the factor for scrolling with the mouse wheel (
MouseWheelScrollFactor) have been increased to allow for faster scrolling.
Bug Fixes
-
Resizing a window with a
GraphControlor programmatically changing aGraphControl'sContentBoundswill no longer break scrolling animations. -
Adding visuals without an explicit size directly to render tree groups (instead of
VisualGroupinstances) now works consistently. Previously, they may sometimes never have appeared. - Fixed an issue where a sequential animation would break when the preferred duration was set to zero.
Rendering
New Features and Improvements
-
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.
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. -
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. -
The
CollapsibleNodeStyleDecoratorclass positions and styles the button now closer to whatGroupNodeStyledoes to achieve a more modern look. -
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
IconLabelStylenow has a default icon size of 24x24 instead of empty, such that the icon is always visible. -
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. -
For labels with empty text and an
IconLabelStylethe position of the icon was fixed. -
The following node styles now consider the pen thickness in the visibility test:
ShapeNodeStyle,ArrowNodeStyle,GeneralPathNodeStyle,GroupNodeStyle, andRectangleNodeStyle. -
ArrowNodeStyleno longer rotates its brush and pen with its arrow direction. -
Fixed that
LabelStylesometimes rendered text even if the effective width available for the text (considering the label width and padding) was zero.
Interaction
New Features and Improvements
-
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. -
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
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
-
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. -
The new
GraphEditorInputMode.CreationSelectableItemsproperty allows you to specifyGraphItemTypeswhich should be selected after creation. -
The new
CreateEdgeInputMode.EdgeDirectionReversedevent and the newCreateEdgeInputMode.OnEdgeDirectionReversedmethod are triggered when the direction of the edge creation changed during edge creation. -
The new
HandleType.Voidenum value makes a handle invisible and excludes it from hit testing. - Reconnecting edges to other nodes is now allowed per default.
- 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. -
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 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. -
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
MoveInputModeclass now also handles moving labels, thus theMoveLabelInputModewas removed. -
The event
ItemsCopiedonGraphViewerInputModeand the eventsItemsCopied,ItemsCut,ItemsPasted,ItemsDuplicated, andDeletedSelectiononGraphEditorInputModenow useItemsEventArgsproviding the items that are the subjects of the events. -
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. -
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
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
PointerEventArgs.Handledproperty has been added that can be used to set and detect if another listener already handled the event. -
MoveViewportInputModenow gracefully handles concurrent programmatic viewport modifications. -
The modifier for using the
ILabelModelParameterFinderduring label movement can now be changed with theLabelPositionHandler.UseParameterFinderRecognizerproperty. -
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
MoveInputModeandMoveUnselectedInputModeproperties ofGraphEditorInputModehave been renamed toMoveSelectedItemsInputModeandMoveUnselectedItemsInputModeto better describe what they are used for. Associated properties and methods have been renamed accordingly. - 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.
-
Toggling the item selection via
Ctrl+Spacenow prefers toggling the selection state ofGraphControl.CurrentItemover deselecting a single selected item. -
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. -
The new
GraphCommands.ZoomToSelectionzooms to the bounding box around all selected items. It can be triggered by the keyboard short cutAlt+2. -
The
IncreaseZoomandDecreaseZoomcommands now also supportPointas parameter. - 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. -
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.
-
-
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
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. -
OverviewInputModenow uses theCanvasControl'sMouseWheelZoomEventRecognizerto determine if the used performed a zoom gesture. - Dragging a selected edge doesn't move all its bends anymore which often screwed up the first and last edge segment.
-
KeyboardInputMode's methods to add command or input bindings have been renamed consistently toAddCommandBinding,AddKeyBinding, andAddRecognizerBinding. These methods now return a token which can be used to remove these bindings again. -
If a
Wheelevent is handled by code, the default behavior (zoom/scroll) will be cancelled. -
The
MouseHoverInputModehas been renamed toToolTipInputModeto better reflect its function. -
The
HandleIsHitandGetClosestHitHandlemethods ofHandleInputModenow have an additional parameter which specifies thePointerTypeof the related user gesture. -
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
-
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. - Improved keyboard navigation for graph items.
-
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. -
LabelDropInputModenow consults theIEditLabelHelperof possible drop targets when dragging and dropping labels. -
New overloads of the
CreateEdgeInputMode.StartEdgeCreationmethod can be used to start interactive edge creation from a node or port, respectively. -
The parent node detection of
GraphClipboardhas been streamlined. -
The new
GraphViewerInputMode.HitTesterproperty works in the same way as theGraphEditorInputMode.HitTesterproperty. -
The
GraphEditorInputMode.DuplicateSelectionmethod now also dispatchesMultiSelectionStartedandMultiSelectionFinishedevents. -
The items reported by the
HandleInputMode.AffectedItemsproperty now include edges that were modified with the height handle ofBezierEdgeStyleandArcEdgeStyle. -
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 sub-input modes of
GraphViewerInputModeandGraphEditorInputModecan now be replaced while the input mode is installed.
Bug Fixes
-
DropInputMode(and derived types) now continues working properly even if the control's template changes. -
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. -
TextEditorInputModenow no longer forces a full WPF layout on every keypress. This may previously have had negative performance impacts on applications with complexUIs. -
Fixed
CompoundKeyEventArgs.KeyCodereturningKey.Systemfor some keys likeKey.Altinstead of the effectively pressed key. - Fixed occasionally missing auto-scrolling on viewport bounds for touch devices.
-
The
GraphInputMode.FindItemsoverload without thecontextparameter did not find items correctly. - Fixed an issue where keyboard navigation would stop working when two items were positioned at the same location.
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
-
Members of
GraphClipboardandGraphEditorInputModewithElementin their name that actually referred to model items were renamed toItemto clarify their usage. -
The
GraphClipboard.Pastemethod now accepts an optionalpasteLocationparameter specifying the center of the bounds of the pasted items. -
The events on
GraphClipboardnow useGraphClipboardEventArgsthat provide the currentIGraphClipboardContextand theItems. -
IClipboardHelpernow has methods to supportDuplicate, too:ShouldDuplicateandOnDuplicated. -
GraphClipboard'sCut,Copy,Paste, andDuplicatemethods now use anIEnumerableto determine the subgraph to copy. -
GraphClipboardnow uses an optimizedClipboardGraphCopierfor its clipboard operations instead of the generalGraphCopier.
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. -
LayoutExtensions.ApplyLayoutAnimatednow has an optional animation duration, which defaults to half a second. -
The
LayoutExecutor.TableLayoutConfiguratorfeature now uses more flexible placements for nodes that don't belong to any table node. -
The thread started when
LayoutExecutor.RunInThreadistrueis now a background thread and thus long-running layout calculations no longer block the process from exiting.
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 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
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 now always places aligned ports correctly in from-sketch mode. -
The
HierarchicalLayoutclass no longer assigns superfluous space to group nodes if there are grouped edges. -
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 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
LeftRightSubtreePlacernow supports minimum segment length, which can be set with the propertiesMinimumFirstSegmentLengthandMinimumLastSegmentLength. -
All subtree placers that used
Tree.RootAlignmentsupport placing the subtree root centered above the ports with the new valueCenterOfPorts. -
The
SingleLayerSubtreePlacersupports placing the subtree root centered with respect to the ports at its children with the new enum valueSingleLayerSubtreePlacerRootAlignment.CenterOfPorts. -
The
AspectRatioSubtreePlacernow supports minimum first and last segment lengths. -
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 Intersections class does not dispose
FilteredGraphWrapperinstances 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.
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. - All the basic geometry types now have a consistent conversion method to the respective WPF geometry types.
Incompatible Changes
Categories: General Graph Controls Rendering Selection, Focus, Highlight Styles Interaction Snapping Clipboard Folding Lookup GraphML View-Layout-Bridge Layout Layout Data Hierarchical Layout Tree Layout Orthogonal Layout Edge Router Labeling Organic Layout Interactive Organic Layout Circular Layout Radial Layout Radial Tree Layout Radial Group Layout Series-parallel Layout Compact Disk Layout Multi-page Layout Partial Layout Tabular Layout Component Layout Tree Map Layout Recursive Group Layout Layout Grid Other Layouts Algorithms Analysis Collections Geometry
General
Incompatible API Changes
- The minimum required .NET versions for yFiles are .NET Framework 4.6.2 and .NET 6.0, respectively.
- 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. -
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
StripeControl.Insetsproperty toTotalPadding. -
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
SegmentRatioPortLocationModelclass is now namedEdgeSegmentPortLocationModel, similar toEdgeSegmentLabelModel. -
The
CreateFromSourceandCreateFromTargetmethods of theSegmentRatioPortLocationModelandBendAnchoredPortLocationModelare now namedCreateParameterFromSourceandCreateParameterFromTarget. -
Removed the
TableAnimationclass. Use the factoryAnimations.CreateTableAnimationmethod as a replacement. -
GenericPortLocationModelhas been renamed toCompositePortLocationModeland doesn't implementIEnumerableanymore. Instead, theParametersproperty can be used to iterate the parameter. -
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. -
The label models
ExteriorLabelModel,InteriorLabelModel, andInteriorStretchLabelModelhave been renamed toExteriorNodeLabelModel,InteriorNodeLabelModel, andStretchNodeLabelModel, respectively,. -
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 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 of theILabelModelParameterFinder.FindBestParameterandILabelModelParameterProvider.GetParametersmethods has been removed. -
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. -
The
ownerparameter of theITable.CreateRow,CreateColumn, andSetParentmethods has been renamed toparent. -
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
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 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
ILabelModelParameter.Supportsmethod has been removed. Instead, theILabelModel.GetGeometrymethod may now throw an exception if the label and label model parameter don't match. -
The
GraphItemTypes.NotContainsmethod was removed, use theContainsmethod instead. -
Method
GroupingSupport.GetPathToRoothas been renamed toGetAncestorsand returns anIReadOnlyListinstead of anIList. -
The static parameter fields of
FreeNodePortLocationModelhave been renamed analogue to the static parameter fields inInteriorNodeLabelModel. -
The
GraphClipboard.IsDummymethod has been renamed toIsHelper. -
The
UndoEngine.Tokenproperty replaces theUndoEngine.GetTokenmethod. -
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
IMapperinterface, the Mappers,DictionaryMapper, andWeakDictionaryMapperclasses have been moved to theyWorks.Utilsnamespace. -
The
ITagOwnerinterface is now in theyWorks.Utilsnamespace. -
The
ILookupinterface and its extension methods have been moved to theyWorks.Utilsnamespace.
Incompatible Behavior Changes
-
The rotation direction of
OrientedRectangle,NodeLabel,EdgeLabelandFreeEdgeLabelModelis now clockwise to be consistent with the other models. -
The
EdgeSegmentPortLocationModel.CreateParameterFromTargetmethod now interprets the parameter ratio from the target to the source side. -
The arrow of the default edge style is now
ArrowType.Triangle. -
The default edge label model parameter is now created from an
EdgeSegmentLabelModelusing itsCreateParameterFromCentermethod instead ofCreateParameterFromSource. -
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 default lookup for
INodedoesn't return anIMutableRectangleanymore, the default lookup forIBenddoesn't return anIMutablePointanymore, and the default lookup forILabeldoesn't return anIMutableSizeanymore. -
SegmentRatioPortLocationModelnow uses the path geometry from the edge's style instead of bend locations to determine segments.
Controls
Incompatible API Changes
-
The
CanvasControl.GetContentHostmethod has been replaced with the read-onlyContentHostdependency property. -
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
-
The default
InputModeinGraphControlis no longernullbut is now set toGraphViewerInputMode. -
Renamed
HighlightIndicatorManager.SelectionModeltoItems. -
Renamed
SelectionIndicatorManager.SelectionModeltoItems. -
Renamed
SelectionIndicatorManager.ModeltoDomain. -
Renamed commands
MoveFocusBackandMoveFocusForwardtoMoveFocusLeftandMoveFocusRight. -
Removed the events
AutoDragChanged,AutoDragInsetsChanged,MouseWheelScrollFactorChanged,MouseWheelZoomFactorChanged, andProjectionChangedof theCanvasControlclass. -
Removed the
AnimateScrollCommandsproperty andCanvasControl.AnimateScrollCommandsPropertyfield. ChangeAnimatedViewportChangesproperty instead. -
Renamed the
CanvasControl.AutoDragproperty toAutoScrollOnBounds. -
Renamed the
CanvasControl.AutoDragInsetsproperty toAutoScrollPadding. -
Renamed the
ViewportChanges.AutoDragfield toAutoScrollOnBounds. -
Renamed the
CanvasControl.AutoDragPropertyproperty toAutoScrollOnBoundsProperty. -
Renamed the
CanvasControl.AutoDragInsetsPropertyproperty toAutoScrollOnBoundsProperty. -
Renamed the
StripeControl.Insetsproperty toTotalPadding. -
Removed the
DragSize,DragTimeandDoubleClickSizeproperties of theCanvasControlclass. -
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. -
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 (
-
Removed resource keys from the
HandlesRendererclass. -
The
GraphModelManagerconstructor no longer hascanvasControlandcontentGroupparameters. Also, theContentGroupproperty can no longer be set directly. Instead, theInstallmethod now sets bothCanvasControlandContentGroup. -
Renamed
Canvasword components in properties and method parameter names toCanvasControl. -
Removed unused protected
GetWorldBoundsmethod(int) fromCanvasPrintDocumentclass. -
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
ICanvasObject.Groupproperty has been renamed toParent.
Incompatible Behavior Changes
-
Cursor changes are applied to
CanvasControl'sCanvasContentHostinstead of theCanvasControlinstance itself. As a result, child controls like scroll bars no longer need to guard against cursor changes of their parent control. However, interested parties have to subscribe to theCanvasContentHost.Cursorproperty to be notified of cursor changes instead of theCanvasControl.Cursorproperty. -
For new
GraphModelManagerinstances, theInstallmethod has to be called either directly or indirectly by assigning theGraphModelManagerto theGraphControl.GraphModelManagerproperty.
Rendering
Incompatible API Changes
-
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. Furthermore, itsDirtyhas been removed. -
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. -
The
OverviewGraphVisualCreatorclass is now calledGraphOverviewRendererand implementsIObjectRendererinstead ofIVisualCreator. -
GridVisualCreatorhas been renamed toGridRenderer.
Selection, Focus, Highlight
Incompatible API Changes
-
Class
FocusIndicatorManagerno longer implementsINotifyPropertyChanged. -
Replaced event
FocusIndicatorManager.PropertyChangedwith eventFocusedItemChanged. -
Renamed Method
FocusIndicatorManager.OnPropertyChangedtoOnFocusedItemChangedand changed signature. -
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. -
FocusIndicatorManager.ShowFocusPolicychanged its default to the newWhenUsingKeyboard. The old policy calledOnlyWhenFocusedis now calledWhenFocused. -
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.
Styles
Incompatible API Changes
-
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. -
Class
TableNodeStyleno longer implementsINotifyPropertyChanged. -
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. -
The
Wrappedproperty ofCollapsibleNodeStyleDecorator,IndicatorNodeStyleDecorator,IndicatorEdgeStyleDecorator,IndicatorLabelStyleDecorator,IndicatorPortStyleDecorator,ShadowNodeStyleDecorator, andIconLabelStylehas been renamed toWrappedStyle. -
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
CollapsibleNodeStyleDecoratorRenderer.CollapseButtonStyleKeyhas been moved to theCollapsibleNodeStyleDecorator. -
The deprecated styles
BevelNodeStyle,PanelNodeStyleandShinyPlateNodeStylehave been removed. -
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. -
The
IArrowinterface now requires theCropAtPortproperty to be provided by implementations. For backward compatibility return false in simple subclasses. -
The
CanvasControlproperty on the various item styles that use a WPF control (NodeControlNodeStyle, etc.) is now a read-only dependency property that can only be set from subclasses.
Interaction
Incompatible API Changes
-
The generic
IGridConstraintProviderinterface has been replaced with non-generic, item-specific interfaces:IBendGridConstraintProvider,INodeGridConstraintProvider, andIPortGridConstraintProvider. Consequently, theGridConstraintProviderclass is no longer generic. -
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. -
Removed the
PortRelocationHandle.CreateDummyEdgeVisualCreatormethod. To change the preview edge's style overwritePortRelocationHandle.CreatePreviewEdgeinstead. -
The
LabelPositionHandler.SetPositionmethod has been removed. -
The
LabelPositionHandler.UseFinderproperty has been removed. Use the newUseParameterFinderRecognizerproperty instead. -
The
LabelPositionHandler.UseParameterFindermethod has been renamed toShouldUseParameterFinder. -
Unified handling for mouse, touch and stylus events. This includes the following changes:
-
Renamed the
CanvasControl.HandleMissingMouseEventsproperty toHandleMissingPointerEvents. -
Renamed constant
CanvasControl.HandleMissingMouseEventsPropertytoHandleMissingPointerEventsProperty. -
Renamed the
MissingMouseEventPolicyenum toMissingPointerEventPolicies. -
Renamed the enum member
MissingMouseEventPolicy.DontReleaseMousetoDontReleasePointer. -
Renamed the enum member
MissingMouseEventPolicy.DontHoldMouseDowntoDontHoldPointerDown. -
Replaced
Mouse2DEventArgs.WheelDeltaproperty byWheelDeltaXandWheelDeltaY. -
Renamed the enum member
Mouse2DEventTypes.LostCapturetoDragCaptureLost. -
Removed the
Mouse2DEventArgs.ScrollAmountproperty. -
Removed the property member
Mouse2DEventArgs.ScrollType. -
Removed the
ScrollTypeenum. -
Added enum member
PointerButtons.TouchContact.
-
Renamed the
-
The
LabelPositionHandler.UseFinderproperty has been removed. -
The protected virtual
CreateEdgeCreationInputModeContextmethod on theCreateEdgeInputModeclass has been removed. Use or override theCreateInputModeContextmethod, instead. -
The
ToolTipQueryEventArgsclass is now namedQueryToolTipEventArgsto properly match the corresponding event's name. -
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. -
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. -
Renamed
DropInputMode.MousePositiontoPointerPosition. -
Renamed
DropInputMode.CaptureMouseInputDuringDragtoCapturePointerInputDuringDrag. -
Renamed
ItemDropInputMode.SnappedMousePositiontoSnappedPointerPosition. -
The generic type of the
IHitTesterinterface has been removed. Instead, a parameter of typeGraphItemTypeshas been added to itsEnumerateHitsmethod. -
The
TextEditorInputMode.AdjustSizemethod has been removed. If the size of theTextBoxmust be forcibly adjusted, theTextBoxitself can be changed accordingly. -
Renamed
LabelDropInputMode.UseBestMatchingParameterandPortDropInputMode.UseBestMatchingParametertoUseLocationForParameter. -
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.
-
-
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. -
The commands previously defined on
GraphControlandCanvasControlare now located in classGraphCommands. The suffixCommandhas 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. -
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. -
Contexts.DefaultandContexts.CreateCanvasContexthave been removed. A validICanvasContextcan be retrieved from theCanvasControl.CanvasContextproperty. -
Contexts.Emptyhas been removed. A validIInputModeContextcan be retrieved usingCanvasControl.InputModeContextproperty. -
The factory methods for input mode contexts on class
Contextshave been removed. AppropriateIInputModeContextimplementations can be obtained usingInputModeContextclass withCanvasControl.InputModeContextas parent context. -
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. -
CreateEdgeInputMode's methods have been renamed:-
GetClosestSourceCandidatetoSelectClosestStartCandidate. -
GetClosestCandidatetoSelectClosestCandidate. -
GetClosestTargetCandidatetoSelectClosestEndCandidate.
-
-
CreateEdgeInputMode.StartPortCandidateHitRadiusnow is defined in view coordinates. -
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
textProviderparameter forToolTipInputMode's constructor has been removed. An event handler for theQueryToolTipevent can be registered instead. -
KeyboardInputMode's methodsAddCommandandAddHandlerhave been renamed toAddCommandBinding,AddKeyBinding, andAddRecognizerBindingto clarify their purpose. The methodsRemoveCommandandRemoveHandlerhave been removed. Instead, the add methods provide a token whoseRemovemethod can be used to remove the binding later. -
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
MouseHoverInputModeclass has been renamed toToolTipInputMode. -
The
GraphInputMode.MouseHoverInputModeproperty has been renamed toToolTipInputMode. -
The
HandleIsHitTouchandGetClosestHitHandleTouchmethods ofHandleInputModehave been removed in favor of the methodsHandleIsHitandGetClosestHitHandle, which now handle all types of pointer devices. -
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 protected
Should-methods of the input modes have been removed and replaced by predicate properties. -
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. -
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. -
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
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. -
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 event
DeletedSelectionofGraphEditorInputModenow usesItemsEventArgsinstead ofSelectionEventArgs. -
Renamed
GraphInputMode.ShouldSelectItemtoShouldSelect. -
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.
Incompatible Behavior Changes
-
Changed the default of
TextEditorInputMode.TextBoxPlacementPolicytoTextBoxPlacementPolicy.MoveTextBox. -
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. -
The
GraphInputMode.FindItemsmethod now considers the actual z-order of the hit items. -
GraphEditorInputMode'sMoveUnselectedItemsInputModenow only moves unselected items. Previously it also moved selected items despite its name. -
The
MultiSelectionRecognizerofGraphEditorInputModeandGraphViewerInputModeare not used anymore for marquee and lasso selection. Instead,MarqueeSelectionInputModeandLassoSelectionInputModehave their own modifiers for different selection policies. -
The
LabelDropInputMode.IsValidLabelOwnermethod now only accepts instances ofFreeLabelModelor that thedraggedLabel's owner type matches the owner type e.g.INode,IEdge, orIPort. -
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. -
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. -
GraphEditorInputMode.AllowGroupingOperationsis now true by default. -
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> -
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. - 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.
- 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. -
The default value of
CreateEdgeInputMode.PortCandidateResolutionRecognizerhas been changed fromShiftIsDowntoCtrlIsDown. -
The default value of the
CreateEdgeInputMode.EnforceBendCreationRecognizerhas been changed formCtrlIsDowntoAltIsDown. -
The default keyboard shortcuts of several commands have been changed:
-
GraphCommands.CollapseGroupnow usesAlt+Left. -
GraphCommands.ExpandGroupnow usesAlt+Right. -
GraphCommands.EnterGroupnow usesAlt+Down. -
GraphCommands.ExitGroupnow usesAlt+Up. -
GraphCommands.ToggleExpansionStatenow usesAlt+Shift+LeftandAlt+Shift+Right. -
The
IncreaseZoomcommand now usesCtrl+Plus. -
The
DecreaseZoomcommand now usesCtrl+Minus.
-
-
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. -
The default edge lookup doesn't provide an
IPositionHandleranymore so dragging a selected edge doesn't move all its bends. -
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. -
NavigationInputModenow interprets the direction of arrow keys in view coordinates by default. -
The default lookup of labels now returns an
IPositionHandlerimplementation. -
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. -
CanvasControl.UpdateContentBoundsnow only considers the items in theRenderTree.ContentGroupinstead of theRootGroupwhen calculating the new bounds. -
CanvasControl'sLastEventLocationproperty has been removed. UseLastPointerEvent.Locationinstead. -
CanvasControl'sLastInputEventproperty has been renamed toLastPointerEventto better reflect its type.
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
-
The values
LabelModelParameterandPortLocationModelParameterhave been removed from theCloneTypesenum as those parameter are typically immutable, so cloning them has no effect. -
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. -
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. -
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. -
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. -
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. -
GraphControlinstances now use a sharedGraphClipboardper default. To revert to the previous behavior, a newGraphClipboardinstance can be set on eachGraphControl. -
For consistency reasons, the property
GraphClipboard.Emptyis now calledIsEmpty.
Folding
Incompatible API Changes
-
The
FoldingLabelOwnerState.Removemethod(. -
FoldingLabelState) was renamed toRemoveLabeland theFoldingLabelState.RemoveBendmethod(FoldingBendState) was renamed toRemoveBend. -
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.
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
-
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. -
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. -
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.
GraphML
Incompatible API Changes
-
The XAML namespace for yFiles WPF has changed and is now
http://www.yworks.com/xml/.yfiles-wpf/4.0/XAML -
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
-
Renamed
ItemMapping.DelegatetoMapperFunction. -
Renamed
ItemCollection.DelegatetoPredicate. -
Renamed the
LayoutExtensions.MorphLayoutmethod toApplyLayoutAnimated. -
Renamed the
LayoutExecutor.Durationproperty toAnimationDuration. -
Renamed the
LayoutExecutor.CreateMorphAnimationmethod toCreateLayoutAnimation. -
The
LayoutGraphAdapter.PortDummyNodeDpKeyconstant has been renamed toPortHelperNodeDataKey. -
Boolean
LayoutExecutor.FixPortsproperty is replaced by anItemMappingPortPlacementPolicies, that allows to specify a policy for the handling of each individual port. -
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. -
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. -
Renamed the
LayoutExecutor.Durationproperty toAnimationDuration. -
Removed the
ContextItemMappingclass. -
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. -
The
TableLayoutConfigurator.PrepareandLayoutExecutor.PrepareTableLayoutmethods now return aPartitionGridDatainstance. -
Renamed the
YGraphAdapterclass toStructureGraphAdapter.-
Renamed the
YGraphAdapter.YGraphproperty toStructureGraph. -
Renamed
YGraphAdapter.CreateEdgeEnumerabletoCreateOriginalEdgeList. -
Renamed
YGraphAdapter.CreateNodeEnumerabletoCreateOriginalNodeList. -
Renamed
YGraphAdapter.CreateEdgeListtoCreateCopiedEdgeList. -
Renamed
YGraphAdapter.CreateNodeListtoCreateCopiedNodeList. -
Renamed
YGraphAdapter.CreateMappertoCreateCopiedToOriginalNodeWrapperandCreateCopiedToOriginalEdgeWrapper. -
Renamed
YGraphAdapter.CreateDataMaptoCreateOriginalToCopiedNodeWrapperandCreateOriginalToCopiedEdgeWrapper.
-
Renamed the
-
Removed key
LayoutGraphAdapter.OriginalTagDpKey. Use the Tag property of the layout items instead to get the original tag associated to the originalIGraphitems.
Incompatible Behavior Changes
- Edges at the same port are now always automatically port grouped unless port groups have been defined explicitly.
-
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.
Layout
Incompatible API Changes
-
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. -
Renamed
EdgeBundlingStagetoBundledEdgeRouter. -
Renamed
GivenCoordinatesStagetoGivenCoordinatesLayout. -
Renamed
GivenCoordinatesStageDatatoGivenCoordinatesLayoutData. -
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:
-
Renamed
BendConvertertoBendSubstitutionStage. -
The
OrientationLayout.HorizontalOrientationproperty has been removed. To check for a horizontal orientation, check if Orientation property equalsLayoutOrientation.LeftToRightorLayoutOrientation.RightToLeft. -
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. - Removed all methods and properties from the Direction class and converted it to an enum.
-
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. -
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. -
Moved
LayoutGraph-related classes likeNodeandEdgefrom namespaceyWorks.Algorithmsto namespaceyWorks.Layout.Graph. -
Moved
ItemMappingclasses from namespaceyWorks.Layoutto namespaceyWorks.Utils. -
Moved
INodeSequencerfrom namespaceyWorks.Algorithmsto namespaceyWorks.Layout.Circular. -
Moved remaining classes and enums from namespace
yWorks.AlgorithmstoyWorks.Analysis. -
PortCalculator,IIntersectionCalculator, andIntersectionCalculatorKeyshave been removed. Instead, theLayoutExecutor.PortAdjustmentPolicyproperty should be set to a suitable value. -
Renamed
BorderLine.CreateMintoCreateMinimum. -
Renamed
BorderLine.CreateMaxtoCreateMaximum. -
GraphPartitionManageris removed,LayoutGraphHiderprovides the same functionality. -
The methods
PortCalculator.CalculatePortsandPortCalculator.EqualsEpshave been removed. -
The following methods have been removed from the
ReverseEdgesStage:ReverseEdgesStage.FindReversedTreeEdges,ReverseEdgesStage.ReverseEdgeandReverseEdgesStage.ReverseEdges. -
Renamed
MirrorModestoMirroredOrientationsandOrientationLayout.MirrorModetoMirroredOrientations. -
The classes
SelfLoopRouterandParallelEdgeRouterhave been moved from theyWorks.Layoutnamespace to theyWorks.Layout.Routernamespace. -
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. -
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. -
Replaced properties
XOffsetandYOffsetof thePortCandidateclass by a single propertyOffsetof typePointD. -
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. -
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 port-related properties of the layout data classes (
SourcePortGroupIds,TargetPortGroupIds,SourcePortCandidates,TargetPortCandidates) have been moved to a sub-data accessible via the propertyPorts. -
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
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. -
Merged
MinimumSizeGroupBoundsCalculatorandInsetsGroupBoundsCalculatorinto the newGroupBoundsCalculatorclass. -
LayoutMultiplexerhas been removed. The features ofComponentLayout(ComponentLayoutDataKey) orRecursiveGroupLayout(GroupNodeLayoutDataKey) can be used instead. -
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
SnapOuterPortsToNodeBorderStageclass has been removed. -
Removed
NormalizeGraphElementOrderStage. UseNodeComparisonandEdgeComparisonofLayoutExecutorinstead. -
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
-
The utility
PortConstraintConfiguratorclass has been removed. -
Removed the classes
PartitionLayoutandPartitionLayoutData. -
The
FamilyTreeLayoutclass has been removed. -
Removed
SplitEdgeStage. -
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. -
Removed
LayoutKeys.NodeIdDpKeyandLayoutKeys.EdgeIdDpKey. -
The
HandleNaNCoordinatesStagehas been removed. -
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 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
-
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. -
Removed public methods
HideGroupNodesandUnhideGroupNodesofGroupHidingStage. -
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
-
Removed the class
Maps. -
Layout data properties that are meant for publishing results now contain the word
Resultin their name: RenamedCircularLayoutData.CircleIdstoCircularLayoutData.CircleIdsResult,HierarchicLayoutData.LayerIndicestoHierarchicalLayoutData.LayerIndicesResult,HierarchicLayoutData.SequenceIndicestoHierarchicalLayoutData.SequenceIndicesResult,OrganicLayoutData.ZCoordinatestoOrganicLayoutData.ZCoordinatesResult,RadialLayoutData.NodeInfostoRadialLayoutData.NodePlacementsResult, andParallelEdgeRouterData.RoutedParallelEdgestoParallelEdgeRouterData.RoutedMultiEdgesResult.-
They are now all made readonly and initialized with an
IMapperinstance.
-
They are now all made readonly and initialized with an
-
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
-
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. -
The
CopiedLayoutGraphclass was removed from the API. To create a copy of a layout graph, the new factoryLayoutGraph.CreateCopymethod may be used. - Methods and and properties with "BoundingBox" in their name have been renamed to include "Bounds" instead.
-
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
-
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 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
GraphDpKeyclass was replaced byValueDataKey. -
Removed the
GraphTransformerclass; use factory methods fromLayoutTransformationsclass instead to create stages that apply transformation operations on aLayoutGraph. -
Replaced usages of the
IComparerinterface withComparisonfunction delegates. -
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.
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 type
SingleItem<was removed. Affected properties useTItem>ItemCollection<instead.TItem> -
Properties of type
ItemMappinginLayoutDataclasses are now named using plural consistently. -
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.
Hierarchical Layout
Incompatible API Changes
-
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. -
Removed
GroupCompactionStrategy. -
Renamed
SimplexNodePlacer.GroupCompactionStrategytoGroupCompactionand changed its type to boolean. -
In the sub-data
SequenceConstraintDataof theHierarchicalLayoutDataPlaceBeforeandPlaceAfterwere replaced byPlaceInOrder. -
In the sub-data
LayerConstraintDataof theHierarchicalLayoutDataPlaceAboveandPlaceBelowwere replaced byPlaceInOrder. -
HierarchicalLayout.GridSpacing: made grid spacing behavior consistent across all layouts by throwing an exception for negative values. -
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. -
Renamed
LayerTypetoHierarchicalLayoutLayerType. -
Renamed
DefaultLayerSequencertoDefaultSequencer. -
Renamed all types, methods and properties containing "hierarchic" to "hierarchical" including
HierarchicLayout, which is renamed toHierarchicalLayout. -
Moved
HierarchicLayout.StopAfterLayering/Sequencing toHierarchicalLayoutCore. -
Replaced
HierarchicLayoutpropertiesBackLoopRouting&BackLoopRoutingForSelfLoopswithHierarchicalLayoutEdgeDescriptor.BackLoopRouting, where it can now be specified per edge (HierarchicalLayoutData.EdgeDescriptors) or for all edges at once (HierarchicalLayout.DefaultEdgeDescriptor). -
Removed properties
SourcePortOptimizationandTargetPortOptimizationfromHierarchicalLayoutEdgeDescriptorclass. -
LayerConstraintDatano longer inherits fromLayoutData. -
SequenceConstraintDatano longer inherits fromLayoutData. -
Renamed
IPortAllocatortoIHierarchicalLayoutPortAssigner. -
Renamed
DefaultPortAllocatortoHierarchicalLayoutPortAssigner. -
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. -
Renamed the
DefaultDrawingDistanceCalculator.NodeToNodeDistanceproperty toDrawingDistanceCalculator.NodeDistance. -
Renamed the
DefaultDrawingDistanceCalculator.EdgeToEdgeDistanceproperty toDrawingDistanceCalculator.EdgeDistance. -
Renamed the
HierarchicLayout.NodeToNodeDistanceproperty toNodeDistance. -
Renamed the
HierarchicLayout.EdgeToEdgeDistanceproperty toEdgeDistance. -
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. -
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
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
IEdgeReverserinterface and theHierarchicLayoutCore.CreateEdgeReversermethod have been 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. -
BusDescriptoris renamed toGridComponentDescriptor. -
HierarchicLayout.BusDescriptorDpKeyis renamed toGridComponentDescriptorDataKey. -
HierarchicLayoutData.Busesis renamed toGridComponents. -
HierarchicLayoutData.BusRootOffsetsis renamed toGridComponentRootOffsets. -
NodeDataType.BusStructureDummyis renamed toGridComponentBusNode. -
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. -
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. -
Names containing
PortBorderGapwere renamed to now containBorderToPortGapRatio. -
Properties
HierarchicLayout.RecursiveGroupLayeringandHierarchicLayout.CompactGroupsare combined intoHierarchicalLayout.GroupLayeringPolicy. -
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. -
Renamed
Hierarchic.NodeDataTypetoHierarchicalLayoutNodeTypeand its valueNormaltoHierarchicalLayoutNodeType.Regular. -
Renamed
Hierarchic.EdgeDataTypetoHierarchicalLayoutEdgeTypeand its valueNormaltoHierarchicalLayoutEdgeType.Regular. -
Renamed
LayerType.NormaltoHierarchicalLayoutLayerType.Regular. -
Renamed
MergingPolicytoLayerMergingPolicy. -
Renamed
RankingPolicytoLayerRerankingPolicyandTopologicalLayerer.RankingPolicytoRerankingPolicy. -
Renamed
WeightHeuristictoSequencerWeightHeuristic. -
The
HierarchicLayout.OrthogonalRoutingproperty has been removed. To specify orthogonal or other routing styles, the routing style on theHierarchicalLayoutEdgeDescriptormust be used instead. -
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. -
The
ICandidateMatcherinterface has been removed. For an advanced customization of the port selection consider implementing a customIPortCandidateSelector. -
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
GroupTranspositionproperty has been removed fromDefaultLayerSequencerclass. The Transposition property should now be used for groups too. -
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
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
-
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. -
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. -
The obsolete extension methods
CreateLayerConstraintFactoryandCreateSequenceConstraintFactoryhave been removed fromHierarchicLayout. To specify layer and sequence constraints, useLayoutDatainstead.
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
-
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
-
The
GridNodePlacer.AutomaticRowAssignmentproperty (now renamed toMultiLayerSubtreePlacer) was removed. The layers are now always automatically assigned if no layer indices are defined viaTreeLayoutData.MultiLayerSubtreePlacerLayerIndices. -
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. -
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. -
Renamed
IProcessortoISubtreePlacerProcessor. -
DelegatingNodePlacernow implementsISubtreePlacerinstead ofIFromSketchNodePlacer. -
BusNodePlacernow implementsISubtreePlacerinstead ofIFromSketchNodePlacer. -
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 "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 the property
RoutingStyle.PolylinetoSingleLayerSubtreePlacerRoutingStyle.StraightLineToChildConnector,RoutingStyle.Forkproperty toSingleLayerSubtreePlacerRoutingStyle.Orthogonal, andRoutingStyle.ForkAtRootproperty toSingleLayerSubtreePlacerRoutingStyle.OrthogonalAtRoot. -
Added
SingleLayerSubtreePlacerRoutingStyle.Polylineproperty which leads to a polyline routing style. -
Removed the
TreeLayout.DefaultLeafPlacerproperty as well asLeafNodePlacerclass. -
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. -
Renamed
IPortAssignmenttoITreeLayoutPortAssigner. -
Renamed
DefaultPortAssignmenttoTreeLayoutPortAssigner. -
Renamed
TreeLayout.PortAssignmentDpKeytoPortAssignerDataKey. -
Renamed
TreeLayoutData.PortAssignmentstoPortAssigners. -
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".
-
Renamed
TreeLayout.MultiParentAllowedtoAllowMultiParent. -
Renamed
TreeReductionStage.MultiParentAllowedtoAllowMultiParent. -
The
TreeReductionStage.NonTreeEdgeLabelingAlgorithmproperty has been renamed toNonTreeEdgeLabeling. -
Remove methods
GetPortBorderGapandGetPortDistanceDeltafrom theDefaultPortAssignment(renamed toTreeLayoutPortAssigner) class. -
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. -
Renamed
FillStyletoAspectRatioChildAlignmentPolicyandAspectRatioNodePlacer.FillStyletoChildAlignmentPolicy. -
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.
-
The properties
TreeLayout.SourcePortConstraintDataAcceptorandTreeLayout.TargetPortConstraintDataAcceptorhave been removed. -
The properties
TreeLayout.SourceGroupDataAcceptor
andTreeLayout.TargetGroupDataAcceptorhave been removed. -
The
TreeComponentLayoutclass has been removed. -
The factory
TreeReductionStage.CreateStraightLineRoutermethod has been removed. The standalone routerStraightLineEdgeRouterclass should be used instead when straight-line edges are required. -
The
AspectRatioTreeLayouthas been removed together withAspectRatioTreeLayoutData,RootPlacement, andSubtreeArrangement. Use theTreeLayoutwith theAspectRatioSubtreePlacerinstead. -
The
ClassicTreeLayouthas been removed together with the enumsLeafPlacement,EdgeRoutingStyle, andPortStyle. TheTreeLayoutcan be used instead. -
Renamed
TreeLayoutData.OutEdgeComparerstoTreeLayoutData.ChildOrderand changed the types to Comparison function. -
Removed
TreeLayout.DefaultOutEdgeComparer. UseTreeLayoutData.ChildOrderinstead. Also removedNodeOrderComparerclass. -
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. -
Replaced
TreeLayoutData.OutEdgeComparersproperty with new, more powerfulChildOrderproperty.
Incompatible Behavior Changes
-
The
TreeLayoutnow considers node labels by default. -
The
TreeLayoutnow places edge labels by default using an integrated labeling algorithm. - Port candidates are always considered if they are specified.
Orthogonal Layout
Incompatible API Changes
-
Renamed
ChainLayoutStyletoChainSubstructureStyle. -
Renamed
CycleLayoutStyletoCycleSubstructureStyle. -
Renamed
TreeLayoutStyletoTreeSubstructureStyle. -
Renamed
EdgeLayoutDescriptortoOrthogonalLayoutEdgeDescriptor. -
Renamed
OrthogonalLayout.EdgeLayoutDescriptortoDefaultEdgeDescriptor. -
Renamed
OrthogonalLayout.EdgeLayoutDescriptorDpKeytoEdgeDescriptorDataKey. -
Renamed
OrthogonalLayoutData.EdgeLayoutDescriptorstoEdgeDescriptors. -
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. -
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. -
Removed the
CompactOrthogonalLayoutclass.
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). -
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 type of
IntermediateRoutingPointsproperty has been changed fromIListtoIEnumerable. -
Renamed
ParallelEdgeRouter.RoutedParallelEdgesDpKeytoRoutedMultiEdgesResultDataKey. -
Renamed
ParallelEdgeRouter.FindAndHideParallelEdgestoFindAndHideMultiEdges. -
Renamed
ParallelEdgeRouterData.RoutedParallelEdgestoRoutedMultiEdgesResult. -
Renamed the
CurveEdgeLayoutDescriptor.MinimumEdgeToEdgeDistanceproperty toMinimumEdgeDistance. -
Renamed the
EdgeLayoutDescriptor.MinimumEdgeToEdgeDistanceproperty (EdgeRouter) toMinimumEdgeDistance. -
Renamed the
PenaltySettings.MinimumEdgeToEdgeDistancePenaltyproperty toEdgeRouterCosts.MinimumEdgeDistanceCost. -
EdgeRouter.Gridhas been replaced byEdgeRouter.GridSpacing. -
The class
Polyline.Gridhas been removed. -
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. -
Renamed
Interval.MintoInterval.Minimum. -
Renamed
Interval.MaxtoInterval.Maximum. -
Renamed
OrthogonalInterval.MintoOrthogonalInterval.Minimum. -
Renamed
OrthogonalInterval.MaxtoOrthogonalInterval.Maximum. -
Renamed
PenaltySettingstoEdgeRouterCosts.-
Renamed the related
EdgeLayoutDescriptor.PenaltySettingsproperty toEdgeRouterCosts. -
Renamed all its properties to
XyzCostinstead ofXyzPenalty:SketchViolationPenaltytoSketchViolationCost,EdgeLengthPenaltytoEdgeLengthCost,BendPenaltytoBendCost,EdgeCrossingPenaltytoEdgeCrossingCost,AdjacentEdgeCrossingPenaltytoAdjacentEdgeCrossingCost,SelfCrossingPenaltytoSelfCrossingCost,NodeCrossingPenaltytoNodeCrossingCost,PortCrossingPenaltytoPortCrossingCost,GroupNodeCrossingPenaltytoGroupNodeCrossingCost,NodeLabelCrossingPenaltytoNodeLabelCrossingCost,EdgeLabelCrossingPenaltytoEdgeLabelCrossingCost,MinimumNodeToEdgeDistancePenaltytoMinimumNodeToEdgeDistanceCost,MinimumGroupNodeToEdgeDistancePenaltytoMinimumGroupNodeToEdgeDistanceCost,MinimumEdgeToEdgeDistancePenaltytoMinimumEdgeDistanceCost,MinimumNodeCornerDistancePenaltytoMinimumNodeCornerDistanceCost,MinimumFirstLastSegmentLengthPenaltytoMinimumFirstLastSegmentLengthCost,BendsInNodeToEdgeDistancePenaltytoBendsInNodeToEdgeDistanceCost,MonotonyViolationPenaltytoMonotonyViolationCost,PartitionGridCellReentrancePenaltytoLayoutGridCellReentranceCost,PortViolationPenaltytoPortViolationCost,InvalidEdgeGroupingPenaltytoInvalidEdgeGroupingCost, andSingleSideSelfLoopPenaltytoSingleSideSelfLoopCost.
-
Renamed the related
-
Renamed and moved data key
PartitionCellKeys.NodeLabelCrossingCostFactorsKeytoEdgeRouter.NodeLabelCrossingCostFactorDataKey. -
Renamed and moved data key
PartitionCellKeys.EdgeLabelCrossingCostFactorsKeytoEdgeRouter.EdgeLabelCrossingCostFactorDataKey. -
Property
EdgeRouterData.LabelCrossingPenaltyFactorshas been replaced by the two new propertiesEdgeRouterData.NodeLabelCrossingCostFactorsandEdgeRouterData.EdgeLabelCrossingCostFactors. -
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 protected
EdgeRouter.CreateDefaultEdgeOrderComparermethod has been removed. UseEdgeRouterData.EdgeProcessingComparisoninstead. -
Renamed
ObstacletoRoutingObstacle. -
Renamed
PathtoPathSearchResult. -
Renamed
PathRequesttoPathSearchRequest. -
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
-
The
EdgeRouterand all its related classes have been moved from namespaceyWorks.Layout.Router.PolylinetoyWorks.Layout.Router. -
The
PolylineLayoutStageclass has been renamed toOctilinearRoutingStage. ItsPreferredPolylineSegmentLengthproperty has been renamed toPreferredOctilinearSegmentLength. -
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 already obsolete properties
EdgeRouter.PolylineRouting,EdgeRouter.PreferredPolylineSegmentLengthandEdgeRouter.MaximumPolylineSegmentRatiohave been removed. They are replaced by respective properties on theEdgeRouterEdgeDescriptorclass. -
Replaced
EdgeRouter.EdgeComparerproperty of typeIComparerwithEdgeRouterData.EdgeProcessingComparisonof type Comparison function. -
Class
PenaltySettingsandEdgeLayoutDescriptor.PenaltySettingsproperty where renamed toEdgeRouterCostsandEdgeRouterEdgeDescriptor.EdgeRouterCosts. -
The
BusRouterclass and all API members related to it have been removed. For bus-style edge routing, useEdgeRouterinstead. -
Method
ParallelEdgeRouter.LayoutParallelEdgeswas renamed toRouteEdges.
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
-
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. -
Made enums
LabelAngleOnRightSideRotationsandLabelAngleReferencesnon-flags enums. -
Removed the
LabelAngleOnRightSideOffsetsenum. -
Changed the
PreferredPlacementDescriptor.AngleOffsetOnRightSideenum property to theAddHalfRotationOnRightSidebool property. -
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. -
Renamed
LabelSideReferences.AbsoluteWithLeftInNorthtoAbsoluteWithLeftAbove. -
Renamed
LabelSideReferences.AbsoluteWithRightInNorthtoAbsoluteWithRightAbove. -
Values of
DiscreteNodeLabelPositionsenum have been renamed.-
InternalMasktoInside. -
EightPosMasktoDiscreteNodeLabelPositions.Outside. -
SidesMasktoSides. -
CornerMasktoCorners. -
Removed value
SandwichMask.
-
-
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, ...
-
-
Renamed
LabelCandidate.CustomProfitto Weight. -
Renamed
SliderModetoEdgeLabelSliderMode. -
The configuration
LabelingDataclass for theGenericLabelingalgorithm has been renamed toGenericLabelingDatato be more in line with otherLayoutDataimplementations. -
Removed
DescriptorWrapperLabelModel. -
ILabelCandidateDescriptorand related interfaces have been removed. -
LayoutGraphAdapter: removedGetLabelCandidateDescriptorProviderandGetLabelCandidateDescriptor. -
MISLabelingBase.ReduceAmbiguityis removed. Ambiguous label placements can instead be penalized usingLabelingCosts.AmbiguousPlacementCost. -
The
PreferredPlacementDescriptorclass has been renamed toEdgeLabelPreferredPlacement.-
The
IEdgeLabelLayout.PreferredPlacementDescriptorproperty has been removed. Instead, the preferred placement can be specified usingEdgeLabelPreferredPlacement.EdgeLabelPreferredPlacementDataKey.
-
The
Organic Layout
Incompatible API Changes
-
The
OutputRestrictionclass and the associated properties have been renamed toShapeConstraint. -
OrganicConstraintDatano longer inherits fromLayoutData. -
Renamed
OrganicLayoutData.SourceGroupIdstoSubstructureSourceGroupIds.OrganicLayoutnow usesOrganicLayout.SubstructureSourceGroupIdDataKeyinstead ofLayoutKeys.SourceEdgeGroupIdDataKey. -
Renamed
OrganicLayoutData.TargetGroupIdstoSubstructureTargetGroupIds.OrganicLayoutnow usesOrganicLayout.SubstructureTargetGroupIdDataKeyinstead ofLayoutKeys.TargetEdgeGroupIdDataKey. -
Renamed the
OrganicLayout.GroupNodeModeDpKeyproperty toGroupNodeHandlingPolicyDataKey. -
TreeSubstructureStyle.Balloonhas been renamed toRadialTree. -
The
OrganicLayoutnow configures theComponentLayoutby default, andSmartComponentLayoutwas removed. -
OrganicLayout.ConfigureComponentLayoutandDisposeComponentLayoutwere removed. To configure theComponentLayout, replace the instance of theComponentLayoutin theLayoutStageStackwith a suitably configured instance. -
OrganicLayout.ConsiderNodeSizeswas removed. TheOrganicLayoutnow always considers node sizes. -
Renamed
OrganicLayout.ClusterAsGroupSubstructureAllowedtoAllowClusterAsGroupSubstructure. -
Renamed
OrganicLayout.NodeEdgeOverlapAvoidedtoAvoidNodeEdgeOverlap. -
Renamed
OrganicLayout.NodeOverlapsAllowedtoAllowNodeOverlaps. -
Renamed
OrganicLayout.MultiThreadingAllowedtoAllowMultiThreading. -
Renamed
GroupNodeMode.NormaltoGroupNodeHandlingPolicy.Free. -
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. -
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
ClassicOrganicLayoutclass has been removed. It is superseded by the more powerfulOrganicLayoutalgorithm that should be used instead. -
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. -
Removed
ConstraintFactoryandOrganicLayout.CreateConstraintFactory. UseOrganicLayoutData.Constraintsinstead. -
OrganicConstraintData.AddFloatingBoundingBoxnow acceptsSizeDits deconstructed values. -
OrganicConstraintData.AddFloatingBoundingBoxnow acceptsRectDits deconstructed values. -
The
RecursiveShuffleLayoutclass has been removed from the API. -
The
OrganicPartitionGridLayoutStageclass has been removed.
Incompatible Behavior Changes
-
The default style of the
OrganicLayout'sComponentLayoutis changed toPackedCircle. -
The
OrganicLayoutnow considers node labels by default. -
The
OrganicLayoutnow places edge labels by default using a generic labeling algorithm. -
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. -
Renamed
EdgeLayoutDescriptortoCircularLayoutEdgeDescriptor. -
Renamed
CircularLayout.DefaultEdgeLayoutDescriptortoEdgeDescriptor. -
Renamed
ExteriorEdgeLayoutDescriptortoCircularLayoutExteriorEdgeDescriptor. -
Renamed
CircularLayout.ExteriorEdgeLayoutDescriptortoExteriorEdgeDescriptor. -
The type of the
CircularLayout.MaximumDeviationAngleproperty has been changed to double. -
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. -
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. -
Removed the enum value
EdgeRoutingPolicy.MarkedExterior. To manually select which edges should be routed externally, use theCircularLayoutData.ExteriorEdgesproperty instead. -
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.
Incompatible Behavior Changes
-
PartitionDescriptor.InitialAngleis measured in degrees rather than radians. -
The default style of the
CircularLayout'sComponentLayoutis changed toPackedCircle. -
The
CircularLayoutnow considers node labels by default. -
The
CircularLayoutnow places edge labels by default using a generic labeling algorithm.
Radial Layout
Incompatible API Changes
-
Radial.NodeInfois renamed toRadialLayoutNodePlacementResult. -
Renamed the
RadialLayout.MinimumNodeToNodeDistanceproperty toMinimumNodeDistance. -
Renamed the
RadialLayout.MinimumEdgeToEdgeDistanceproperty toMinimumEdgeDistance. -
Radial.NodeInfohas been renamed toRadialLayoutNodePlacementResult. -
Renamed
Radial.LayeringStrategytoRadialLayeringStrategy. -
Replaced
ItemMappingOutEdgeComparerswithChildOrderDataChildOrder. -
Removed the enum value
Radial.LayeringStrategy.UserDefined. Custom layers are now always used if defined viaRadialLayoutData.LayerIdsproperty. -
Removed the enum value
CenterNodesPolicy.Custom. Custom center nodes are now always used if defined viaRadialLayoutData.CenterNodesproperty. -
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. -
Replaced properties
RadialLayoutData.NodeComparablesandRadialLayoutData.OutEdgeComparerswith new, more powerfulChildOrderproperty.
Incompatible Behavior Changes
-
The default style of the
RadialLayout'sComponentLayoutis changed toPackedCircle. -
The
RadialLayoutnow considers node labels by default. -
The
RadialLayoutnow places edge labels by default using a generic labeling algorithm. -
The
RadialLayoutNodePlacementResult.SectorStartproperty is now interpreted in clockwise direction. -
Custom layers are now always used if defined via
RadialLayoutData.LayerIdsproperty. -
Custom center nodes are now always used if defined via
RadialLayoutData.CenterNodesproperty.
Radial Tree Layout
Incompatible API Changes
-
Renamed
RootNodePolicytoRootSelectionPolicy. -
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. -
Replaced layout data
OutEdgeComparerproperty withChildOrderDataChildOrder. -
Removed
BalloonLayout.Comparer. UseRadialTreeLayoutData.ChildOrderinstead. -
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 default style of the
RadialTreeLayout's (formerlyBalloonLayout's)ComponentLayoutis changed toPackedCircle. -
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.
Radial Group Layout
Incompatible API Changes
-
Renamed
CactusGroupLayout.GroupSizingPolicytoRadialGroupLayout.GroupSizePolicy. -
The
CactusGroupLayouthas been renamed toRadialGroupLayout, and theCactusGroupLayoutDatahas been renamed toRadialGroupLayoutData. -
Property
PreferredRootWedgehas been renamed toPreferredRootSectorAngle. -
Replaced
CactusGroupLayout.NodeComparerproperty of typeIComparerwithRadialGroupLayoutData.ChildNodeComparisonof type Comparison function.
Incompatible Behavior Changes
-
The default style of the
RadialGroupLayout's (formerlyCactusGroupLayout's)ComponentLayoutis changed toPackedCircle. -
The default of the
PreferredRootSectorAngleproperty has been changed from 180 to 360. -
The
RadialGroupLayoutnow places edge labels by default using a generic labeling algorithm.
Series-parallel Layout
Incompatible API Changes
-
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. -
Renamed the
SeriesParallelLayout.VerticalAlignmentproperty toParallelSubgraphAlignment. -
Renamed the
SeriesParallelLayout.MinimumNodeToNodeDistanceproperty toMinimumNodeDistance. -
Renamed the
SeriesParallelLayout.MinimumEdgeToEdgeDistanceproperty toMinimumEdgeDistance. -
Renamed
EdgeLayoutDescriptortoSeriesParallelLayoutEdgeDescriptor. -
Renamed
SeriesParallelLayout.DefaultEdgeLayoutDescriptortoDefaultEdgeDescriptor. -
Renamed
SeriesParallelLayout.EdgeLayoutDescriptorDpKeytoEdgeDescriptorDataKey. -
Renamed
SeriesParallelLayoutData.EdgeLayoutDescriptorstoEdgeDescriptors. -
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. -
Removed
SeriesParallelLayout.DefaultOutEdgeComparer. UseSeriesParallelLayoutData.ChildOrderinstead. Also removedDefaultOutEdgeComparerclass. -
Replaced
SeriesParallelLayoutDataproperty .OutEdgeComparerswith new, more powerfulChildOrderproperty.
Incompatible Behavior Changes
-
The
SeriesParallelLayoutnow considers node labels by default. -
The
SeriesParallelLayoutnow places edge labels by default using an integrated labeling algorithm. -
SeriesParallelLayoutnow handles general graphs by default.
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. -
The
MultiPageLayout.CreateProxyReferenceNodesproperty has been renamed toUseProxyReferenceNodes. -
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). -
Renamed
GroupingPolicytoMultiPageGroupingPolicy. -
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. -
Renamed
Multipage.NodeTypetoMultiPageNodeTypeand its valueNormaltoMultiPageNodeType.Regular. -
Renamed
Multipage.EdgeTypetoMultiPageEdgeTypeand its valueNormaltoMultiPageEdgeType.Regular. -
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.
Partial Layout
Incompatible API Changes
-
Renamed
Partial.LayoutOrientationtoPartialLayoutOrientation. -
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. -
Removed the enum value
ComponentAssignmentStrategy.Customized. Custom components are now always used if defined withPartialLayoutData.ComponentIds,ClearAreaLayoutData.ComponentIdsorFillAreaLayoutData.ComponentIdsrespectively.
Incompatible Behavior Changes
-
Custom components are now always used if defined with
PartialLayoutData.ComponentIds.
Tabular Layout
Incompatible API Changes
-
Renamed
NodeLayoutDescriptortoTabularLayoutNodeDescriptor. -
Renamed
TabularLayout.DefaultNodeLayoutDescriptortoDefaultNodeDescriptor. -
Renamed
TabularLayout.NodeLayoutDescriptorDpKeytoNodeDescriptorDataKey. -
Renamed
TabularLayoutData.NodeLayoutDescriptorstoNodeDescriptors. -
Renamed
Tabular.LayoutPolicytoTabularLayoutMode. -
Replaced
TabularLayout.NodeComparerproperty of typeIComparerwithTabularLayoutData.FreeNodeComparisonof type Comparison function. -
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.
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
-
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. -
The
IsolatedGroupComponentLayoutclass has been removed. -
Renamed
ComponentArrangementStyles.NonetoComponentArrangementStyle.KeepCenters. -
Removed the
ComponentArrangementproperty fromComponentLayout; use the newComponentArrangementStyle.Noneinstead to avoid arranging components. -
Removed
ComponentLayout.ArrangeFieldsmethod. -
Simplified parameter lists of methods
ComponentLayout.ArrangeComponentsandComponentLayout.SetOriginto now accept instances of Component class. -
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.
Incompatible Behavior Changes
-
ComponentArrangementStyle.PackedCircleandComponentArrangementStyle.PackedRectanglenow consider the convex hulls of components to determine overlaps.
Tree Map Layout
Incompatible API Changes
-
Renamed
TilingPolicytoTilingStrategyandTreeMapLayout.TilingPolicytoTreeMapLayout.TilingStrategy. -
Replaced
TreeMapLayout.NodeComparerproperty of typeIComparerwithTreeMapLayoutData.ChildNodeComparisonof type Comparison function. -
Removed the
NodeWeightComparerclass.
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
-
PartitionGridis renamed toLayoutGrid. This also affects the related classesPartitionGridData,GenericPartitionGridStage, andGenericPartitionGridStageData. -
Renamed
ColumnDescriptortoLayoutGridColumn&RowDescriptortoLayoutGridRow. -
Renamed
PartitionCellIdtoLayoutGridCellDescriptor. -
Renamed inset properties on classes
LayoutGridColumn(formerlyColumnDescriptor) andLayoutGridRow(formerlyRowDescriptor) to now be called padding (e.g.,LeftPaddinginstead ofLeftInset). -
Removed helper class
SwimlanesandLayout.SwimlaneRepresentative. -
Removed the
SwimlanesModeenum. -
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). -
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. - 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.
Other Layouts
Incompatible API Changes
-
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
-
Removed the
InterEdgeRoutingStyleenum.
Algorithms
Incompatible API Changes
-
IntersectionInfohas been renamed toIntersectionand has become an inner class ofLayoutGraphAlgorithms. -
Renamed
ParallelEdges.FindParallelEdgestoLayoutGraphAlgorithms.FindMultiEdges. -
Removed the
BfsDirectionenum. UseTraversalDirectioninstead. -
Removed namespace
Algorithms.Util. The types are now in namespace Algorithms. -
The
TreeAnalyzerclass has been removed. Use the more convenient and powerfulTreeAnalysisclass instead. -
Removed the Intersections class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the
IntersectionAlgorithmclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead. -
Removed the
NetworkFlowsclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead (e.g.MaximumFlow). -
Removed the
NodeOrdersclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead (e.g.TopologicalNodeOrder). -
Removed the
GraphConnectivityclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead. -
Removed the
IndependentSetsclass. Use corresponding methods ofLayoutGraphAlgorithmsinstead. - The Triangulator algorithm class has been removed.
-
Removed the Substructures class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the Trees class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
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. -
Removed the Centrality class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Removed the
ShortestPathsclass. Use corresponding methods ofLayoutGraphAlgorithmsclass instead (e.g.ShortestPath). -
Removed the Groups class. Use corresponding methods of
LayoutGraphAlgorithmsinstead. -
Renamed the Dendrogram class to
HierarchicalClusteringDendrogram. -
Removed the Bfs class. Use
LayoutGraphAlgorithms.Bfsinstead. -
Removed the Dfs class. Use
LayoutGraphAlgorithms.Dfsinstead. -
Renamed
Analysis.ComponenttoConnectedComponent. -
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
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 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 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.
Analysis
Incompatible API Changes
-
The
NodeAggregation.NodeTypeHandlingproperty has been renamed toNodeTypePolicy. -
The
NodeTypeHandlingPolicyenum has been renamed toNodeTypePolicy. -
Renamed
AggregationInfotoNodeAggregationInfo. -
Renamed
AggregationInfo.ParentAggregationtoParentNodeAggregation. -
Renamed
NodeAggregation.AggregationPolicytoNodeAggregationPolicy. -
Renamed
NodeAggregation.AggregationtoAggregationPolicy. -
Renamed
DistanceMetrictoKMeansDistanceMetric. -
Renamed
GraphStructureAnalyzer.HasMultipleEdgestoHasMultiEdges. -
Renamed
GraphStructureAnalyzer.GetMultipleEdgestoGetMultiEdges. -
Replaced enum
Algorithms.LinkagewithHierarchicalClusteringLinkage. -
Renamed
SubstructuretoSubstructureItems. -
Renamed all
MultiThreadingAllowedproperties toAllowMultiThreading. -
Renamed
Analysis.ComponenttoConnectedComponent.
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
-
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. -
The copy constructors on the
RectD,PointD, andSizeDclasses were removed. Use theToRectD,ToPointD, orToSizeDmethods respectively instead. -
The
GeomUtilitiesclass has been renamed toGeometryUtilities. -
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. -
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. -
Moved
IPlaneObjectandLineSegmentto namespaceyWorks.Geometry. -
Renamed the
LineSegment.XOffsetproperty toYIntercept. -
Made
LineSegmentclass sealed. -
Renamed the
LineSegment.IsInXIntervallmethod toLineSegment.IsInXIntervalandLineSegment.IsInYIntervallmethod toLineSegment.IsInYInterval. -
The methods
PointD.ToCeilingPointandToFloorPointhave been removed. - The conversion extension methods on WPF geometry types that converted to yFiles geometry types have been removed.
- The conversion extension methods on WPF geometry types that converted to yFiles geometry types have been removed.
- Implicit and explicit conversion operators between yFiles geometry types and the platform geometry types have been removed.