Release NotesyFiles for HTML Version 3.0
Version 3.0.0.4 is the latest bugfix release of yFiles for HTML in the yFiles for HTML 3.0 major release series.
See the change log for a list of all changes in this and all other versions.
To learn about the new features in version 3.0, have a look at About yFiles for HTML Version 3.
Below you will find the technical requirements and a list of all new features, improvements, and incompatible changes.
Technical Requirements
- For development, we strongly recommend an IDE with dedicated support for the web platform, for example Visual Studio Code or JetBrains WebStorm.
- yFiles for HTML-based web applications require a common, standards-compliant browser.
These include Chrome, Safari, Firefox, and Edge on Windows, macOS, iOS, and Android operating systems.
The yFiles for HTML 3.0 release has been tested with the following browsers:
All changes Version 3.0
This version brings a major overhaul of many parts of the API, resulting in a lot of incompatible changes. We have designed many functions to be simpler, more intuitive and more consistent and removed technical debt. In addition, this release contains numerous new features, improvements, and bug fixes to all parts of the library.
New Features, Improvements, and Bug Fixes
Categories: General Graph Components Rendering Selection, Focus, Highlight Styles WebGL Interaction Label Editing Snapping Clipboard Folding View-Layout-Bridge Layout Hierarchical Layout Tree Layout Orthogonal Layout Edge Router Organic Layout Interactive Organic Layout Radial Tree Layout Partial Layout Component Layout Algorithms Analysis Collections Geometry
General
New Features and Improvements
-
The yFiles class system now follows the conventions of the ECMAScript standard even
more closely. As a result, some special classes and constructs have become
superfluous, e.g., the
YObject,YNumber,YBoolean, andYStringtypes and the$classmember. -
The event listener API for yFiles events is now similar to JavaScript's
EventTarget. Each event sender now has a singleaddEventListenerandremoveEventListenermethod that gets the event name as the first parameter and an optional options object as the last one. The second parameter is the event listener function that gets two parameters: a specificEventArgsobject and the sender instance. The options support automatic event deregistration via theAbortControllerAPI and single (once) event invocation with automatic deregistration. - Option objects in arguments of constructors and other methods now also work for nested properties. Previously, only the direct properties of the class could be defined.
-
It is now possible to explicitly pass
undefinedto optional parameters matching the behavior of ECMAScript and TypeScript. - yFiles for HTML 3.0 uses a new license format (license version "1.2"). Existing licenses with license version "1.1" remain compatible.
-
The yFiles npm package is now named
@yfiles/yfiles. This makes it easier to serve yFiles from a local registry by associating the @yfiles scope with it. -
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 library now prevents problems with strict CSP settings, as we now set CSS styles
with the
HTMLElement.styleproperty instead of thestyleattribute.
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,LayoutNodeLabel,LayoutEdgeLabelandFreeEdgeLabelModelis 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 the publicILabelModelandIPortLocationModelclasses are now public and provide all properties necessary to recreate them on the models. Consequently, the staticdeserializeParameterandserializeParametermethods of theILabelModelParameterandIPortLocationModelParameterclasses, 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
property-changedevent on theUndoEngineclass is now also emitted if the token is changed. -
The new static
ITable.getTablemethod returns theITableinstance of a node if there is one. -
The types of
IModelItem.tagproperties are now easier to customize. See the "Augmenting the tag property" section in the Developer's Guide for more details.
Bug Fixes
-
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.PREVIOUS_PARENT.
Components
New Features and Improvements
-
ViewportLimiternow also works with isometric projections and offers options to use theCanvasComponent.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.CanvasComponentnow also notifies the viewport limiter when the size of thecontentBoundsor the size of theCanvasComponentchanges. -
Added a
pointer-cancelevent to theCanvasComponent. -
The
SvgExport.exportSvgAsyncmethod now supports an optional render completion callback that can be used to await asynchronous rendering. -
Theming is now specified with CSS variables, such that the look and feel of a
GraphComponentcan now be customized with a few lines of CSS.-
The available values for the
--variable areyfiles-theme-variantroundandsquarewith solid strokes, and the newsquare-roundandsquare-hatchedwith a hatched stroke. - It's now possible to specify an offset for resize handles and the selection indicator rectangle via theming. Setting an offset can prevent such handles from overlapping ports.
-
Consequently, the
Themeclass has been removed.
-
The available values for the
-
The scrollbars of a
CanvasComponentare now easier to style since we improved their CSS rules. For example, the scrollbar size is now determined by the CSS variables--,yfiles-scrollbar-size--, andyfiles-scrollbar-horizontal-size--.yfiles-scrollbar-vertical-size -
GraphComponentnow usesGraphViewerInputModeas the defaultinputModefor basic graph exploration. -
The
ICanvasContext.canvasComponentproperty (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 onCanvasComponentwhich are related to input devices now have the same consistent names. -
The
CanvasComponent.contentRectproperty is now namedcontentBoundsto make its purpose clearer. TheupdateContentRectmethod has been renamed likewise. -
The superfluous
CanvasComponent.setContentRectmethod has been removed in favor of the setter of thecontentBoundsproperty. -
It is now possible to have more than one
BridgeManager. This allows you to have different types of bridges on different types of edges. -
The DOM focus state of the
CanvasComponentmoved from the container element to an inner child of theCanvasComponent. This makes it easier to listen to DOM events in HTML elements that are part of the render tree, e.g. in anHtmlVisualor an overlay panel. -
CanvasComponentconstructor now acceptsHTMLElementas hosting element instead ofHTMLDivElement. This allows initialization of theCanvasComponentin semantic elements and custom elements. -
The
CanvasComponent.focusmethod now has an optional parameter that takes an options object with apreventScrollproperty, similar to theHTMLElement.focusmethod. This replaces theCanvasComponent.preventFocusScrollingproperty.
Bug Fixes
- Fixed an issue where a sequential animation would break when the preferred duration was set to zero.
New Demos
-
New Viewport Limiter demo shows the improved behavior of the
ViewportLimiterclass. - The new timeline demo shows how to implement a timeline component for graphs that change over time.
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
LassoPathFinishRegionRenderTagclass will be passed as render tag for the finish region 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
IObjectRenderer.VOID_OBJECT_RENDERERconstant 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,OCTAGON_STANDING,TRIANGLE_POINTING_LEFT, andTRIANGLE_POINTING_RIGHT. 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. -
The
WebGLShapeNodeStyleandWebGLImageNodeStyleclasses, and the WebGL selection visualization now support triangle shapes pointing down, left, and right as well as a diamond shape. -
The
ImageNodeStyleandIconLabelStyleclasses can now have a background visual. The shape of this background can be one of the values ofShapeNodeShape. -
The new
CssFillclass is a fill that supports CSS color values. -
TextWrappingsupports four new policies for trimming the text without wrapping the line:TRIM_CHARACTER,TRIM_CHARACTER_ELLIPSIS,TRIM_WORD, andTRIM_WORD_ELLIPSIS. The existing policies that allow wrapping lines have been renamed to properly distinguish them from the new ones. In addition, the clipping-only policy previously enabled with theDefaultLabelStyle.clipTextandMarkupLabelStyle.clipTextproperties is now available with theTextWrapping.CLIPvalue, and the defaultwrappingpolicy of these styles is nowTextWrapping.WRAP_WORD_ELLIPSIS. -
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. -
The fill conversion now prioritizes the new
CssFillclass for input strings. -
The Color class is now a fill and can therefore be used wherever the
SolidColorFillclass was previously used. The latter has therefore been removed. -
CollapsibleNodeStyleDecoratorhas new methods for creating a custom button visualization. - The default line spacing has been reduced to 0.2 to better match the platform defaults.
Bug Fixes
-
The following node styles now consider the pen thickness in the visibility test:
ShapeNodeStyle,ArrowNodeStyle,GeneralPathNodeStyle,GroupNodeStyle, andRectangleNodeStyle. -
For
IconLabelStylethewidthandheightof the rendered icon are no longer swapped. -
When the label text is rendered using the
TextRenderSupport.addTextmethod and wrapping is word-ellipsis or character-ellipsis, an ellipsis character is now always added when necessary. -
The
TextRenderSupport.addTextmethod now uses the correct line spacing when a shape is specified. - Resolved an issue where resize handles were not updating when group nodes were expanded or collapsed.
-
Nodes rendered with
ArrowNodeStylethat are filled with a gradient do not rotate the fill along with the arrow, anymore.
New Demos
- The new Shape Port Style demo shows this new style.
- The new Arrow demo shows the new visualization options for arrows.
- The new General Path Node Style demo shows how to create stars, polygons, and other shapes with this style.
WebGL
New Features and Improvements
-
The new
WebGLArrowType.CROP_AT_PORTenum value enables cropping similar to the newIArrow.cropAtPortproperty. -
The
WebGLLabelStyleandWebGLIconLabelStyleclasses now support different paddings per direction. -
The automatic conversion of
LabelStyletoWebGLLabelStylenow considers the minimumLabelStyle.padding(if uniform padding is not set) to prevent text misplacement or disappearance. -
WebGL styles can now be set directly via the
IGraph. - Decorator styles for WebGL and SVG rendering simplify style handling on rendering type switch.
- Automatic conversion for WebGL styles in SVG rendering mode.
Bug Fixes
-
Fixed an issue where instantiating animations via
WebGLGraphModelManager.createBeaconAnimation(and all other animation creating functions) would throw an exception when the timing parameter was not provided. -
WebGLLabelStylenow avoids unnecessary text wrapping for labels with large padding when there is sufficient space to place the text. - Bend handles are now always displayed correctly when rendering with WebGL.
- Ports are now correctly positioned when they lie slightly outside the node.
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
pointer-long-pressevent is available for all pointer input types and replaces the previous touch-specific long press API. -
The new
pointer-long-restevent 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.edge-direction-reversedevent 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
CanvasComponent'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 theMoveLabelInputModehas been removed. -
The event
items-copiedonGraphViewerInputModeand the eventsitems-copied,items-cut,items-pasted,items-duplicated, anddeleted-selectiononGraphEditorInputModenow useItemsEventArgsproviding the items that are the subjects of the events. -
When editing label text, users can now enter newlines with
Shift+Enterin addition toCtrl+Enter/Command+Enter. -
The
CanvasComponentnow listens to nativePointerEventsto handle mouse, touch, and stylus input. -
The new
ctrlKey,shiftKey,altKey, andmetaKeyboolean properties ofPointerEventArgsandClickEventArgsspecify which modify keys were pressed during the event. -
The order of the two parameters of the
EventRecognizerfunction has been reversed: Theeventis now the first one, and the rarely usedsenderthe last one. -
A fully customizable context menu is now included. You have complete control over
the menu elements and can customize all UI elements to your liking. Of course, it's
also still possible to use the context menu of your favorite UI framework. In
addition, the API of the
ContextMenuInputModehas been improved and its event handling was simplified. -
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.item-clickedevent 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. -
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 ofGraphComponent.currentItemover deselecting a single selected item. -
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
Command.ZOOM_TO_SELECTIONzooms to the bounding box around all selected items. It can be triggered by the keyboard short cutAlt+2. - Edge creation can now be cancelled by ending the gesture over the source node.
-
Edge creation is canceled if the
GraphComponentloses 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 theCanvasComponent'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.
-
If a
Wheelevent is handled by code, the default behavior (zoom/scroll) will be cancelled. -
Command handling has been improved: The previous
ICommand, inspired by WPF's commands, has been replaced with an enumeration of primary input gestures calledCommand.GraphComponentnow manages the execution of commands:-
GraphComponent.executeCommandruns the specified command with an optional parameter. -
GraphComponent.canExecuteCommandindicates whether the specified command can be executed. -
The
CanExecuteCommandChangedevent is triggered when the executable state of a command has changed.
-
-
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 aprojectiononGraphComponent. - 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 dispatchesmulti-selection-startedandmulti-selection-finishedevents. -
The items reported by the
HandleInputMode.affectedItemsproperty now include edges that were modified with the height handle ofBezierEdgeStyleandArcEdgeStyle. -
The static member
GraphClipboard.DEFAULT_GRAPH_CLIPBOARDhas been added and is used per default asGraphComponent.clipboard. This way copy&paste operations work between multipleGraphComponentinstances without the need to set a sharedGraphClipboardinstance first. -
The sub-input modes of
GraphViewerInputModeandGraphEditorInputModecan now be replaced while the input mode is installed. - It is now possible to declare different sets of keyboard shortcuts as well as localizations for string constants depending on the language the user has enabled in their user agent.
-
The
Cursorconstructor now allows the specification of the hot-spot. - Cursors for resize handles now show double-headed arrows on all devices.
-
NodeDropInputMode,LabelDropInputMode,StripeDropInputMode, andPortDropInputModenow provide a staticDEFAULT_TRANSFER_TYPEproperty which represents the transfer type to which the respective input mode is configured by default. - Setting the tooltip content or custom components as tooltips has been streamlined.
Bug Fixes
-
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
GraphComponentthat has a projection, the inertia now works in the right direction. -
Fixed that the
onMarqueeSelectandonLassoSelectmethods ofGraphEditorInputModeandGraphViewerInputModewere called with a wrong input mode context. - 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.
- Offset rectangle handles were hard to hit with a custom theme scale and now properly consider theme scaling and custom offsets.
- Fixed label edit boxes having no width/height if editing started outside of the viewport.
New Demos
- the new Mouse Wheel Customization demo shows how to customize and enhance the default mouse wheel behavior.
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. - The label text editor element now takes the on-screen keyboard into account when it scrolls into the visible part of the view, so that it is actually always visible.
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 whichSnapResultshall 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.cropSnapLinesistrue. -
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, andCompositePortLocationModelPortSideof this candidate can be specified when adding the parameter to the model. -
The new
LayoutExecutorAsync.createWebWorkerMessageHandlerandLayoutExecutorAsyncWorker.initializeWebWorkermethods simplify the default setup for layouts running in a web worker. -
The
LayoutExecutor.tableLayoutConfiguratorfeature now uses more flexible placements for nodes that don't belong to any table node.
Bug Fixes
-
Exceptions thrown by
IGraph.applyLayoutare now properly re-thrown (instead of causing an unhandled promise rejection) and can be caught by a catch block.
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,LayoutNodeLabel, andLayoutEdgeLabelas 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, seeLayoutNode.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
-
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
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
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.
New Demos
-
There is a new demo showing how to implement
sourcePortAlignmentandtargetPortAlignmentin hierarchical layout. -
There is a new demo showing how to use the
HierarchicalLayoutData.incrementalNodesproperty to incrementally lay out the newly loaded nodes in a nested graph.
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
RootNodeAlignmentsupport placing the subtree root centered above the ports with the new valueCENTER_OF_PORTS. -
The
SingleLayerSubtreePlacersupports placing the subtree root centered with respect to the ports at its children with the new enum valueSingleLayerSubtreePlacerRootAlignment.CENTER_OF_PORTS. -
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
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.
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
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.
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
- Fixed an issue that may have automatically disabled the component layout when using constraint-based features.
Interactive Organic Layout
Demo Improvements
-
The Interactive Organic Layout demo now shows how to run the
InteractiveOrganicLayoutin a web worker thread.
Radial Tree Layout
New Features and Improvements
-
Added data key
OUT_EDGE_COMPARATOR_DATA_KEYtoRadialTreeLayoutclass (formerlyBalloonLayout).
Partial Layout
New Features and Improvements
-
PartialLayoutnow supports specifying inversely directed edges in addition to undirected and directed edges.
Component Layout
New Features and Improvements
-
ComponentLayoutnow supportsnodeMargins(formerlynodeHalos) for eachComponentArrangementStyleother thanNONEandKEEP_CENTERS.
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.
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.
Collections
New Features and Improvements
-
The
IEnumerable.ofTypemethod now supports primitive types as element types. -
The
IEnumerable.filtermethod now has two new overloads with type guards.
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 now consistently acceptIPointinstead ofPointandIRectangleinstead ofRect. -
There are now methods on
RectandPointto 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 itstopLeftmethod. Similarly,IMutableRectangleno longer implementsIMutablePoint.
Incompatible Changes
Categories: General Graph Components Rendering Selection, Focus, Highlight Styles WebGL 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 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,ObservableCollection,DefaultPortCandidate, andDefaultSelectionModel. - Removed
DefaultLabelModelParameterFinder. - Removed
DefaultBendCreator. -
Removed the
Defaultprefix from the names of the following types:Graph,WebGL2DefaultLabelStyle. -
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.actualInsetsmethod tototalPadding. -
Renamed the
GroupNodeStyle.contentAreaInsetsproperty tocontentAreaPadding. -
Renamed
Insetsproperties of allILabelModelimplementations tomargins. -
Replace name part
Insetsof other types and members with {}Padding{}.
-
Renamed the
-
Removed the
BridgeManager.clipMarginproperty. -
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,ExteriorLabelModelPosition,InteriorLabelModelPosition,InteriorStretchLabelModelPosition,StretchStripeLabelModelPosition, andStripeLabelModelPosition,. -
Renamed the
CompositePortLocationModelPortSideenum toPortSides. -
The yFiles npm package is now named
@yfiles/yfiles. This makes it easier to serve yFiles from a local registry by associating the @yfiles scope with it. -
The
Enumstatic helper methods have been removed. Instead, each yFiles enum has a newmethod that can be used to retrieve the name of an enum value.getName(value): string -
Removed obsolete browser-specific workarounds:
- Cr320635, Cr433873, Cr701075.
- Edge2057021.
- Ie14492280, Ie205775, Ie233711, Ie2337112, Ie7766782, Ie964525.
- Wk203237.
-
Renamed all members containing
ComparisonorComparertoComparator. -
The static
isInstancemethod of each type was removed. Useinstanceofinstead. This change can be done by the migration tool. - The library now only comes in a variant that uses JS modules, and the UMD variant has been removed. Nowadays, almost all tools work with JS modules, and you can use a bundler like Rollup if you need the library in a different format.
- The TypeScript types for very old versions of TypeScript have been removed. The oldest supported TypeScript version is now 5.0.
-
APIs that used
Classnow use the<T>Ttype directly instead. This usually means that instead of, you can now useSomeClass.$classSomeClassinstead. -
Renamed the
CreateEdgeInputMode.allowSelfloopsproperty toallowSelfLoops. -
Renamed the
GraphEditorInputMode.selectNodeAndSelfloopBendsmethod toselectNodeAndSelfLoopBends. -
Renamed the
GraphEditorInputMode.autoSelectSelfloopBendsproperty toautoSelectSelfLoopBends. -
Renamed the
IEdge.isSelfloopmethod toIEdge.isSelfLoop.
Graph
Incompatible API Changes
-
The
ILookupinterface and its extension methods have been moved to theyWorks.Utilsnamespace. -
The
IMapperinterface, the Mappers,Mapper, andWeakDictionaryMapperclasses have been moved to theyWorks.Utilsnamespace. -
The
SegmentRatioPortLocationModelclass is now namedEdgeSegmentPortLocationModel, similar toEdgeSegmentLabelModel. -
The
createFromSourceandcreateFromTargetmethods of theSegmentRatioPortLocationModelandBendAnchoredPortLocationModelare now namedcreateParameterFromSourceandcreateParameterFromTarget. -
Removed the
TableAnimationclass. Use the factoryIAnimation.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
deserializeParameterandserializeParametermethods of theILabelModelParameterandIPortLocationModelParameterclasses have been removed. These methods 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 methodsIUndoUnit.fromHandlerandIUndoUnit.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
copyChildNode,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'ssourceNodeandtargetNodemethods 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.enumerableNotContainsTypesmethod was removed, use theincludesmethod 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.
Incompatible Behavior Changes
-
The rotation direction of
OrientedRectangle,LayoutNodeLabel,LayoutEdgeLabelandFreeEdgeLabelModelis 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 thanON_EDGEis 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.
Components
Incompatible API Changes
-
GridVisualCreatorhas been renamed toGridRenderer. -
Renamed the coordinate transformation methods to also include the source coordinate
system in their names:
-
Renamed
CanvasComponent.toViewCoordinatestoworldToViewCoordinates. -
Renamed
CanvasComponent.toWorldCoordinatestoviewToWorldCoordinates. -
Renamed
IRenderContext.toViewCoordinatestoworldToViewCoordinates.
-
Renamed
-
The default
inputModeinGraphComponentis no longernullbut is now set toGraphViewerInputMode. -
Renamed
HighlightIndicatorManager.selectionModeltoitems. -
Renamed
SelectionIndicatorManager.selectionModeltoitems. -
Renamed
SelectionIndicatorManager.modeltodomain. -
Renamed commands
MOVE_FOCUS_BACKandMOVE_FOCUS_FORWARDtoMOVE_FOCUS_LEFTandMOVE_FOCUS_RIGHT. -
Removed the
animateScrollCommandsproperty andCanvasControl.AnimateScrollCommandsPropertyfield. ChangeanimatedViewportChangesproperty instead. -
Renamed the
CanvasComponent.autoDragproperty toAutoScrollOnBounds. -
Renamed the
CanvasComponent.autoDragInsetsproperty toautoScrollPadding. -
Renamed the
ViewportChanges.AUTO_DRAGfield toAutoScrollOnBounds. -
Removed the
dragSize,dragTimeanddoubleClickSizeproperties of theCanvasComponentclass. -
The predefined
EventRecognizerconstants of theMouseEventRecognizers,KeyEventRecognizers, andTouchEventRecognizersclasses have been moved to theEventRecognizersclass. In addition, some rarely used constants have been removed. -
The events on
CanvasComponentwhich are related to input devices and the correspondingEventRecognizerconstants have neem renamed to conform to platform conventions. -
The new
CanvasComponent.renderTreeproperty now encapsulates all low-level render object related API which was previously available directly onCanvasComponent.-
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 (
-
The superfluous
CanvasComponent.setContentRectmethod has been removed in favor of the setter of thecontentBoundsproperty. -
The
GraphModelManagerconstructor no longer hascanvasControlandcontentGroupparameters. Also, thecontentGroupproperty can no longer be set directly. Instead, theinstallmethod now sets bothCanvasComponentandcontentGroup. -
Renamed
Canvasword components in properties and method parameter names toCanvasComponent. -
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. -
Due to the switch to pointer events and the unification of code, some gestures may
now start or end on an
upevent instead of adownevent or vice versa. -
The
CanvasComponent.resourcesproperty has been removed since everything can now be customized in other ways, in particular with CSS classes. -
The names of
CanvasComponent's coordinate transformation methods now also include the source coordinate system:toPageFromViewis nowviewToPageCoordinates,toViewFromPageispageToViewCoordinates, andtoWorldFromPageispageToWorldCoordinates. -
The DOM focus state of the
CanvasComponentmoved from the container element to an inner child of theCanvasComponent. Therefore, 'blur' listeners onCanvasControl.div(nowCanvasComponent.htmlElement) do not trigger anymore. Instead, use thefocusoutevent onCanvasComponent.htmlElement. -
The
Color.fromArgbmethod has been removed. Use theColorconstructor or theColor.fromRGBAmethod instead. -
The events
GraphComponent.graph-changed,CanvasComponent.content-margins-changed,CanvasComponent.input-mode-changed, andCanvasComponent.input-mode-context-changedhave been removed. -
The order of the arguments of the methods
CanvasComponent.zoomToandCanvasComponent.zoomToAnimatedhas changed. -
The
HTMLCanvasVisual.paintmethod has been renamed torender. -
SizeChangedDetectionModehas been removed: TheGraphComponentsize is now always detected using a Resize Observer. -
The
Themeclass has been removed in favor of CSS variables. TheCLASSICtheme is no longer available. -
The
CanvasComponent.schedulemethod has been removed as it had no use. -
The
RenderModesenum is now calledRenderMode, since this is not a flags enum. Also, its valuesWEB_GLandWEB_GL2have been renamed to the nicer names WebGL and WebGL2. -
Renamed
CanvasComponent.divtoCanvasComponent.htmlElementto reflect the less strict requirement for its hosting element. -
Renamed the values of the
ScrollBarVisibilityenum to be more clear:-
ScrollBarVisibility.NEVERis nowScrollBarVisibility.HIDDEN. -
ScrollBarVisibility.AS_NEEDED_DYNAMICis nowScrollBarVisibility.AUTO. -
ScrollBarVisibility.ALWAYSis nowScrollBarVisibility.VISIBLE.
-
Incompatible Behavior Changes
-
For new
GraphModelManagerinstances, theinstallmethod has to be called either directly or indirectly by assigning theGraphModelManagerto theGraphComponent.graphModelManagerproperty.
Rendering
Incompatible API Changes
-
The
VOID_VISUAL_CREATORclass was removed. Use theIVisualCreator.VOID_VISUAL_CREATORsingleton instead. -
The
ICanvasObjectDescriptorinterface has been renamed toIObjectRendererand itsisDirtymethod has been removed. -
The
ICanvasObjectinterface has been renamed toIRenderTreeElementand itsuserObjectproperty has been renamed totag. Itsdescriptorproperty has been replaced with propertyrendererof typeIObjectRenderer. -
The
ICanvasObjectGroupinterface has been renamed toIRenderTreeGroup. -
The
ICanvasObjectInstallerinterface has been removed. -
The singletons of the
ICanvasObjectDescriptorclass 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,DEFAULT_LABEL_DESCRIPTOR,defaultNodeDescriptor,DEFAULT_PORT_DESCRIPTOR,edgeDescriptor,edgeLabelDescriptor,nodeDescriptor,nodeLabelDescriptor,portDescriptor,portLabelDescriptor,provideUserObjectOnMainCanvasObject,getCanvasObject,GetCanvasObjectGroup,GetCanvasObjectGroup,GetCanvasObjectGroup,GetCanvasObjectGroup, andgetMainCanvasObjecthave been renamed toDEFAULT_EDGE_RENDERER,DEFAULT_LABEL_RENDERER,DEFAULT_NODE_RENDERER,DEFAULT_PORT_RENDERER,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 theCANDIDATE_DRAWING_VALID_NON_FOCUSED_KEY,CANDIDATE_DRAWING_VALID_FOCUSED_KEY,CANDIDATE_DRAWING_INVALID_NON_FOCUSED_KEY, andCANDIDATE_DRAWING_INVALID_FOCUSED_KEYstatic 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 theVIEWPORT_TEMPLATE_KEYstatic property. -
The new
MarqueeSelectionInputMode.marqueeRendererproperty replaces thetemplateproperty andMARQUEE_RECTANGLE_TEMPLATE_KEYstatic property. -
The new
LassoSelectionInputMode.LassoRendererproperty replaces thefinishRegionTemplateandfinishRegionHighlightTemplateproperties and theFINISH_REGION_TEMPLATE_KEYandFINISH_REGION_HIGHLIGHT_TEMPLATE_KEYstatic properties. Also, theLASSO_STROKE_KEYandLASSO_FILL_KEYstatic properties have been removed. -
The new
candidateRendererproperty on theLabelPositionHandlerclass replaces thecandidateTemplateandhighlightTemplateproperties and theCANDIDATE_TEMPLATE_KEYandHIGHLIGHT_TEMPLATE_KEYstatic properties. -
The
getCanvasObjectandgetCanvasObjectsmethods of classCanvasComponenthave been renamed togetRenderTreeElementand have been moved to theGraphModelManagerclass. -
The
createSnapResultCanvasObjectDescriptormethod of classSnapContexthas been renamed tocreateSnapResultRenderer. -
The
graphVisualCreatorproperty of classGraphOverviewComponentis now calledGraphOverviewRendererand of typeIObjectRenderer. -
The classes
GraphOverviewSvgVisualCreator,GraphOverviewCanvasVisualCreator,GraphOverviewWebGLVisualCreator, andWebGL2GraphOverviewVisualCreatorwere replaced by theGraphOverviewRendererclass, which implementsIObjectRenderer. The new class uses canvas rendering. The other rendering methods were removed from the library. There is a demo implementation for SVG rendering in the overview styles demo.
Selection, Focus, Highlight
Incompatible API Changes
-
Class
FocusIndicatorManagerno longer implementsINotifyPropertyChanged. -
Replaced event
FocusIndicatorManager.property-changedwith eventfocused-item-changed. -
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 theGraphComponentclass 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 newWHEN_USING_KEYBOARD. The old policy calledONLY_WHEN_FOCUSEDis now calledWHEN_FOCUSED. -
HighlightIndicatorManagernow by default uses the newGraphComponent.highlightscollection. Adding, removing, and clearing highlights should now be done via theGraphComponent.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
-
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 deprecated styles
BevelNodeStyle,PanelNodeStyleandShinyPlateNodeStylehave been removed. -
Renamed some values of
TextWrappingShapeandShapeNodeShape:- Triangle2 is now
TRIANGLE_POINTING_DOWN. - Hexagon2 is now
HEXAGON_STANDING.
- Triangle2 is now
-
Removed the following values from
ShapeNodeShape:SHEARED_RECTANGLE,SHEARED_RECTANGLE2, Trapez, Trapez2,FAT_ARROW, andFAT_ARROW2.-
Use the
ArrowNodeStylefor more flexible visualizations of these geometries.
-
Use the
-
Renamed
STAR5_UPto 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:SHEARED_RECTANGLE,SHEARED_RECTANGLE2, Trapez, and Trapez2. -
The
IArrowinterface now requires thecropAtPortproperty to be provided by implementations. For backward compatibility return false in simple subclasses. -
Removed
TemplateNodeStyle,StringTemplateNodeStyle,TemplateLabelStyle,StringTemplateLabelStyle,TemplatePortStyle,StringTemplatePortStyle,TemplateStripeStyleandStringTemplateStripeStyle. Alternatively, useLitNodeStylefrom the yFiles demos, or implement a custom style. -
The
SolidColorFillclass has been removed because the Color class takes over its functions. -
The
MarkupLabelStyleno longer inherits fromDefaultLabelStyle. -
WebGLImageNodeStyle: renamed background visual properties: shape βbackgroundShape, fill βbackgroundFill, stroke βbackgroundStroke. -
Renamed
textDecorationtoTextDecorationsto reflect its enum flags characteristic. - Removed
TextDecoration.BLINKenum value. -
Renamed
WebGL2IconNodeStyletoWebGLImageNodeStyle.-
Renamed its
iconproperty toimage. -
Renamed its
iconColorproperty toimageColor.
-
Renamed its
-
The
VoidNodeStyle,VoidEdgeStyle,VoidLabelStyle,VoidPortStyle,VoidStripeStyleclasses, and the respective renderer classes were removed. Use one of the following constant singletons instead:INodeStyle.VOID_NODE_STYLE,IEdgeStyle.VOID_EDGE_STYLE,ILabelStyle.VOID_LABEL_STYLE,IPortStyle.VOID_PORT_STYLE, andIStripeStyle.VOID_STRIPE_STYLE. -
The
VoidShapeGeometryandVoidPathGeometryclasses were removed. Use one of the following constant singletons instead:IShapeGeometry.VOID_SHAPE_GEOMETRYandIPathGeometry.VOID_PATH_GEOMETRY. -
The
ImageNodeStyle.imageproperty has been renamed to `href`. -
The
ImageNodeStyle.fallbackImageproperty has been removed. -
The
ImageNodeStyleRenderer.TEMPLATE_KEYhas been removed. -
Removed
fontWeightenum in favor of setting the font's weight as string. -
The values of the
TextWrappingenum have been renamed to distinguish those that wrap the lines from those that don't. -
The
DefaultLabelStyle.clipTextandMarkupLabelStyle.clipTextproperties have been removed. In case a label text should be clipped but not wrapped, use theTextWrapping.CLIPpolicy. - Font's equals implementation now check for value equality instead of only looking for referential equality.
Incompatible Behavior Changes
- The default line spacing has been reduced to 0.2 to better match the platform defaults.
-
The default value of the
DefaultLabelStyle.wrappingandMarkupLabelStyle.wrappingproperties has been changed toTextWrapping.WRAP_WORD_ELLIPSIS.
WebGL
Incompatible API Changes
-
The type of the
WebGLLabelStyle.paddingandWebGLIconLabelStyle.paddingproperties is nowInsetsinstead of a singlenumber. - Made
WebGLTextureRenderinga non-flag enum. -
The
WebGL2ShapeNodeShape.HEXAGON2property is now calledHEXAGON_STANDING. -
Style setters on the
WebGL2GraphModelManagerhave been removed. -
Replaced "WebGL2" prefix with "WebGL" for the following types:
WebGL2Animation,WebGL2AnimationDirection,WebGL2AnimationEasing,WebGL2AnimationTiming,WebGL2ArcEdgeStyle,WebGL2ArrowType,WebGL2BeaconAnimationType,WebGL2BeaconNodeIndicatorStyle,WebGL2BridgeEdgeStyle,WebGL2DashStyle,WebGL2DefaultLabelStyle,WebGL2EdgeIndicatorStyle,WebGL2Effect,WebGL2FadeAnimationType,WebGL2FocusIndicatorManager,WebGL2GraphModelManager,WebGL2GraphModelManagerRenderMode,WebGL2GroupNodeStyle,WebGL2HighlightIndicatorManager,WebGL2IconLabelStyle,WebGL2IndicatorType,WebGL2LabelIndicatorShape,WebGL2LabelIndicatorStyle,WebGL2LabelShape,WebGL2LineCap,WebGL2NodeIndicatorShape,WebGL2NodeIndicatorStyle,WebGL2PolylineEdgeStyle,WebGL2PulseAnimationType,WebGL2ScaleAnimationType,WebGL2SelectionIndicatorManager,WebGL2ShakeAnimationType,WebGL2ShapeNodeShape,WebGL2ShapeNodeStyle,WebGL2Stroke,WebGL2TextureRendering,WebGL2Transition,WebGL2TransitionProperties,WebGL2Visual. -
The
RenderModes.WEB_GLenum value and theWebGLShapeNodeStyle,WebGLImageNodeStyle,WebGLPolylineEdgeStyle,WebGLTaperedEdgeStyle, andGraphOverviewWebGLVisualCreatorclasses have been removed. -
The
textAlignmentproperty inWebGLLabelStylewas renamed tohorizontalTextAlignment. -
Class
WebGLAnimationno longer implementsIAnimationbut is still accepted inIAnimation.createParallelAnimationandIAnimation.createSequentialAnimationthrough auto-conversion.
Interaction
Incompatible API Changes
-
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. -
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.INITIAL_SINGLE_AND_DOUBLE_CLICKtoClickReportingPolicy.INSTANT. -
Renamed
DoubleClickPolicy.DOUBLE_CLICK_ONLYtoWAIT_FOR_DOUBLE_CLICK. -
Removed
DoubleClickPolicy.BOTH_SINGLE_CLICKS_AND_DOUBLE_CLICK. -
Changed the default of
ClickInputMode.clickReportingPolicytoClickReportingPolicy.INSTANT. -
Removed the
preventNextDoubleClickmethod fromClickInputModeclass. Use theCancelmethod instead. -
The
LassoSelectionEventArgs.selectionPathproperty has been renamed to Path. -
The core
onMarqueeSelectandonLassoSelectmethods ofGraphEditorInputModeandGraphViewerInputMode, that take an enumerable and predicate, have been removed while the otheronMarqueeSelectandonLassoSelectmethod 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. -
Renamed
LabelDropInputMode.useBestMatchingParameterandPortDropInputMode.useBestMatchingParametertouseLocationForParameter. -
Events which involve item changes triggered by input modes are now of type
InputModeItemEventArgsinstead ofItemEventArgs. These are the events:-
CreateBendInputMode:bend-created. -
CreateEdgeInputMode:start-port-candidate-changed,end-port-candidate-changed,edge-created,port-added,edge-creation-started. -
GraphEditorInputMode:label-edited,label-added,node-created,port-added. -
ItemDropInputModeand inheritors:item-created. -
NavigationInputMode:group-collapsing,group-collapsed,group-expanding,group-expanded,group-entering,group-entered,group-exiting,group-exited. -
TableEditorInputMode:deleted-item. -
EditLabelInputMode:label-added,label-editing-started,label-editing-canceled,label-edited. -
StripeDropInputMode:stripe-created.
-
-
Events which involve item deletion or structural changes triggered by input modes
are now of type
InputModeItemChangedEventArgs:-
GraphEditorInputMode.deleted-item:InputModeItemChangedEventArgsinstead ofItemDeletedEventArgs. -
GraphEditorInputMode.edge-ports-changed:InputModeItemChangedEventArgsinstead ofEdgeEventArgs. -
GraphEditorInputMode.node-reparented:InputModeItemChangedEventArgsinstead ofNodeEventArgs. -
EditLabelInputMode.label-deleted:InputModeItemChangedEventArgsinstead ofLabelEventArgs.
-
-
Renamed "Source" to "Start" and "Target" to "End" in the following members of
CreateEdgeInputModeclass:-
Renamed
resolveSourcePortCandidatestoresolveStartPortCandidates. -
Renamed
resolveTargetPortCandidatestoresolveEndPortCandidates. -
Renamed
source-port-candidate-changedtostart-port-candidate-changed. -
Renamed
target-port-candidate-changedtoend-port-candidate-changed. -
Renamed
sourcePortCandidatetostartPortCandidate. -
Renamed
targetPortCandidatetoendPortCandidate. -
Renamed
snapToTargetCandidatetosnapToEndCandidate. -
Renamed
cancelGestureOnInvalidTargettocancelGestureOnInvalidEnd. -
Renamed
sourceNodeDraggingFinishedRecognizertostartPortOwnerDraggingFinishedRecognizer. -
Renamed
sourceNodeDraggingCursortostartPortOwnerDraggingCursor. -
Renamed
showSourcePortCandidatesHitTestabletoshowStartPortCandidatesHitTestable. -
Renamed
onSourcePortCandidateChangedtoonStartPortCandidateChanged. -
Renamed
onTargetPortCandidateChangedtoonEndPortCandidateChanged. -
Renamed
source-port-candidate-changedtostart-port-candidate-changed. -
Renamed
target-port-candidate-changedtoend-port-candidate-changed. -
Renamed
getSourcetogetStartPortOwner. -
Renamed
getTargetNodetogetEndPortOwner. -
Renamed
lookupSourcePortCandidateProvidertogetStartPortCandidateProvider. -
Renamed
lookupTargetPortCandidateProvidertogetEndPortCandidateProvider. -
Renamed
GetSourcePortCandidatestogetStartPortCandidates. -
Renamed
GetTargetPortCandidatestogetEndPortCandidates. -
Renamed
GetSourcePortCandidate(PointD)togetStartPortCandidate. -
Renamed
getSourcePortCandidate(IEnumerable<,IPortCandidate>Point, 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
InputModeContextproperty has been removed from theIInputModeinterface. In input mode implementations, the property has been renamed toparentInputModeand changed to protected access to prevent incorrect usage. -
ICanvasContext.DEFAULTandICanvasContext.createCanvasContexthave been removed. A validICanvasContextcan be retrieved from theCanvasComponent.canvasContextproperty. -
IInputModeContext.EMPTYhas been removed. A validIInputModeContextcan be retrieved usingCanvasComponent.inputModeContextproperty. -
The factory methods for input mode contexts on the
IInputModeContextinterface have been removed. AppropriateIInputModeContextimplementations can be obtained usingInputModeContextclass withCanvasComponent.inputModeContextas parent context. -
The static fields
ALL_NODE_CANDIDATESandALL_NODE_AND_EDGE_CANDIDATESonIEdgeReconnectionPortCandidateProviderhave 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 thequery-tool-tipevent can be registered instead. -
The
ICommandinterface and its implementations have been replaced with the enumCommand. -
Constants of
ICommandhave been replaced with equally named constants of enumCommand. -
The methods
canExecuteandexecuteand itscan-execute-changedevent inICommandhave been replaced withCanvasComponent'scanExecuteCommandandexecuteCommandmethods and theCanExecuteCommandChangedevent, respectively. -
Custom commands can no longer be created. As an alternative, register handlers on
KeyboardInputMode. -
Removed callback methods which only raised the related events from classes
CanvasComponentandGraphComponent, e.g.,OnZoomChanged. Use the corresponding events instead, e.g.,zoom-changed. -
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, andisHitfromCanvasComponentclass. 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.label-text-changedhas been changed tolabel-editedto 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,label-deleted,label-text-editing-started,label-text-editing-canceled, andvalidate-label-text. The eventslabel-editingandlabel-addinghave been moved toEditLabelInputModeand renamed toquery-label-editingandquery-label-adding, 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,label-deleted,label-text-editing-started,label-text-editing-canceled, andvalidate-label-text. The eventslabel-editingandlabel-addinghave been moved toEditLabelInputModeand renamed toquery-label-editingandquery-label-adding, respectively, to clarify their purpose. -
Replaced
MouseEventArgsandTouchEventArgswithPointerEventArgs. -
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
item-tapped,item-double-tapped, andcanvas-tappedfromGraphInputModein 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
deleted-selectionofGraphEditorInputModenow 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. -
Removed the
PortRelocationHandle.GHOST_VISUALIZATION_STROKE_KEYconstant. Use the new.CSS class instead.yfiles-edge-relocation-ghost -
The
LassoTestables.ALWAYSandSINGLEsingletons have been moved to theILassoTestabletype. -
The
CanvasComponentlistens to and handlesPointerEventsto intercept user input. Custom styles might need to handlepointer-downevents to ensure proper click events will be delivered to listeners. - Snapping override (i.e. disable snapping temporarily) is now recognized by pressing the command key on the macOS platform.
-
Added
META_KEYtoDragDropKeyStates. -
Removed
KeyEventArgs.originalSourcewhich is already covered byKeyEventArgs.OriginalEvent.target. -
Renamed
KeyEventArgs.alttoKeyEventArgs.altKey. -
Renamed
KeyEventArgs.shifttoKeyEventArgs.shiftKey. -
Renamed
KeyEventArgs.controltoKeyEventArgs.ctrlKey. -
Renamed
KeyEventArgs.metatoKeyEventArgs.metaKey. -
Removed the
LabelTextValidatingEventArgs.cancelproperty. Instead, set thevalidatedTexttonullto reject the edited label text. -
The
MouseEventArgs.wheelDeltaproperty has been renamed towheelDeltaY. -
The
MouseEventArgs.scrollAmountproperty has been removed. -
Removed
CanvasComponent.KeyPressevent and associatedKeyEventType.Press. Instead, use thekey-downevent or listen to the browser's (deprecated) "keypress" event. -
Renamed
ModifierKeys.WINDOWStoModifierKeys.META. -
The order of the two parameters of the
EventRecognizerfunction was reversed. -
The
CanvasComponentnow listens to pointer events, instead of mouse and touch events. -
The CSS class for all snap references was renamed from
yfiles-snap-linetoyfiles-snap-reference. - The
SNAP_LINE_STROKE_KEYwas removed. - The
toolTipclass has been removed.
Incompatible Behavior Changes
-
Changed the default of
TextEditorInputMode.textBoxPlacementPolicytoTextBoxPlacementPolicy.MOVE_TEXT_BOX. -
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 fromCTRL_UPtoALT_UP. -
The default value of
disableSnappingRecognizerinCreateEdgeInputMode,HandleInputMode, andMoveInputModehas been changed fromCTRL_DOWNtoALT_DOWN. -
The default value of
centerReshapeRecognizerinNodeReshapeHandleProviderandReshapeHandlerHandlehas been changed fromALT_IS_DOWNtoCtrlIsDown. -
The default value of
ReparentNodeHandler.reparentRecognizerhas been changed fromSHIFT_IS_DOWNtoCtrlIsDown. -
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
edge-creation-startedonly 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
gesture-finishing, allowing users to apply final updates to the end port. -
Ensured the following event order for gestures:
-
gesture-starting,gesture-started. -
Cancellation path:
gesture-canceling,gesture-canceled. -
Completion path:
edge-creation-started,gesture-finishing,edge-created,gesture-finished.
-
-
The
edge-creation-startedandedge-createdevents 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
IEdgeReconnectionPortCandidateProvider.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 fromSHIFT_IS_DOWNtoCtrlIsDown. -
The default value of the
CreateEdgeInputMode.enforceBendCreationRecognizerhas been changed formCtrlIsDowntoALT_IS_DOWN. -
The default keyboard shortcuts of several commands have been changed:
-
Command.COLLAPSE_GROUPnow usesAlt+Left. -
Command.EXPAND_GROUPnow usesAlt+Right. -
Command.ENTER_GROUPnow usesAlt+Down. -
Command.EXIT_GROUPnow usesAlt+Up. -
Command.TOGGLE_EXPANSION_STATEnow usesAlt+Shift+LeftandAlt+Shift+Right. -
Command.INCREASE_ZOOMnow usesCtrl+Plus. -
Command.DECREASE_ZOOMnow 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 thebend-createdevent, 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. -
CanvasComponent.updateContentBoundsnow only considers the items in theRenderTree.contentGroupinstead of therootGroupwhen calculating the new bounds. -
The mouse wheel events of the
GraphComponentnow use the browser's native {}},deltaX{deltaYanddeltaModevalues. This implies that the mouse wheel behavior now also respects the client's current system settings.
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 forSnapResultwith different constraints. -
The
snapandisSnappedmethods ofSnapResulthave been removed. Instead, aconstraintproperty of typeSnapConstrainthas been added that is used to merge possibleSnapResultand 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
SnapResulthave 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
LABEL_MODEL_PARAMETERandPORT_LOCATION_MODEL_PARAMETERhave been removed from theCloneTypesenum as those parameter are typically immutable, so cloning them has no effect. -
ElementCopiedCallbackhas been renamed toItemCopiedCallback. -
GraphViewerInputMode'selements-copiedevent has been renamed toitems-copied. -
GraphEditorInputMode'selements-copied,elements-cut,elements-copied,elements-pastedandelements-duplicatedevents were renamed toitems-copied, etc. -
On
GraphClipboard, theelements-cut,-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
ParentNodeDetectionModeshas been reduced to contain only the mainly used options. The optionroothas been renamed toNONE, and the optionsALLOW_SELFandFORCEas well as theMODE_MASKandMODIFIER_MASKhave been removed. ThetargetNodemethod can be overridden if the reduced modes are not suitable and may call the newfindParentByPreviousParentmethod to simulate the oldFORCEsetting. -
GraphClipboard`sgetTargetNodemethods now take an additionalClipboardOperationContextparameter, and thegetTargetNodeoverload for nodes also takes apasteLocationas an additional parameter. -
GraphComponentinstances now use a sharedGraphClipboardper default. To revert to the previous behavior, a newGraphClipboardinstance can be set on eachGraphComponent. -
For consistency reasons, the property
GraphClipboard.emptyis now calledisEmpty.
Folding
Incompatible API Changes
-
Interface
IFolderNodeConverterhas a newupdateGroupNodeStatemethod. -
Interface
IFoldingEdgeConverterhas a newupdateMasterEdgesmethod. -
FolderNodeConverternow relies onFolderNodeDefaultsto configure initialization and update of states. -
FoldingEdgeConverterandMergingFoldingEdgeConverternow rely onFoldingEdgeDefaultsto configure initialization and update of states.
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 fromGraph. 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
CanvasComponent.inputModeContextLookupandCanvasComponent.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 methods
GraphMLIOHandler.addInputMapperFutureandGraphMLIOHandler.addInputHandlerFactoryhave been removed, together with their support classes. -
Type and property annotations via the
$metaattributes are not supported anymore. Instead, metadata has to be registered withGraphMLIOHandler.addTypeInformation. -
The convenience
GraphMLSupportclass, the predefinedICommand.OPENandICommand.SAVEcommands, and theStorageLocationenum have been removed. Use custom application code instead. -
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.PORT_DUMMY_NODE_DP_KEYconstant has been renamed toPORT_HELPER_NODE_DATA_KEY. -
Several expert arguments have been removed from the convenience functions
applyLayoutandapplyLayoutAnimated. These areeasedAnimation,updatedContentBound,allowUserInteraction,configureTableLayout,considerViewportLimiterandhideEdgesAtEdges. -
Some default values of
LayoutExecutorhave been changed to be in line with default behavior ofIGraph.applyLayout/applyLayoutAnimatedthat was already in place in 2.6. These areanimateViewport, has changed from false to true and eased animation, has changed from false to true. -
The parameters
updateContentBounds,considerViewportLimiter, andtargetBoundsInsetswere removed fromIGraph.applyLayout. -
Renamed
LayoutExecutorAsync.createMorphAnimationtocreateLayoutAnimation. -
Boolean
LayoutExecutorAsync.fixPortsproperty is replaced by anItemMappingportPlacementPolicies, that allows to specify a policy for the handling of each individual port. -
The static
frommethod has been removed from theItemMapping,ItemCollection, and. ContextItemMappingclasses.-
The deprecated
LayoutExecutorAsync.graphControlproperty has been removed. Use theLayoutExecutorAsync.graphComponentproperty instead. -
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
FROM_DESCRIPTOR.PreferredPlacementDescriptors are now automatically considered when specified throughLayoutDatas.-
Renamed value
FROM_MODELtoPREFER_MODEL. -
Renamed value
FROM_PARAMETERtoPREFER_PARAMETER. -
Added value
KEEP_PARAMETER, 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.AFFECTED_NODES_DP_KEY. 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.ORIGINAL_TAG_DP_KEY. 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. -
For
GenericLayoutData, the methods toaddanItemMappingor anItemCollectionare now overloads and no longer includeLayoutNode,LayoutEdge, etc in their name. For example, theaddNodeItemCollectionmethod is now namedaddItemCollection. -
LayoutExecutor.abortHandlerwas removed and replaced by the two propertiesLayoutExecutor.stopDurationandLayoutExecutor.cancelDuration. -
OrganicLayout:OrganicLayoutParallelSubstructureStylehas been renamed toOrganicLayoutParallelSubstructureStyle. -
AlignmentStageAlignmentPolicy;SNAP_X_Yhas been renamed toSNAP_XY. -
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.LEFT_TO_RIGHTorLayoutOrientation.RIGHT_TO_LEFT. -
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 asInsetsand 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.NODE_HALO_DP_KEYtoLayoutKeys.NODE_MARGIN_DATA_KEY.
-
The properties previously named
-
Renamed
LayoutExecutor.targetBoundsInsetstotargetBoundsPadding. -
Renamed
GroupingKeys.GROUP_NODE_INSETS_DP_KEYtoGROUP_NODE_PADDING_DATA_KEYand moved the key toLayoutKeys. -
Renamed
GroupingKeys.MINIMUM_NODE_SIZE_DP_KEYtoLayoutKeys.MINIMUM_GROUP_NODE_SIZE_DATA_KEY. -
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 anIEnumerableofLayoutNodeorLayoutEdge. -
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
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 typePoint. -
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(COMPONENT_LAYOUT_DATA_KEY) orRecursiveGroupLayout(GROUP_NODE_LAYOUT_DATA_KEY) 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. UsenodeComparatorandedgeComparatorofLayoutExecutorinstead. -
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.LOW_QUALITY. 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.MINIMUM_GROUP_NODE_SIZE_DATA_KEYandLayoutKeys.GROUP_NODE_PADDING_DATA_KEY. 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.SUBGRAPH_NODES_DATA_KEYandSubgraphLayoutStage.SUBGRAPH_EDGES_DATA_KEY. -
Removed
LayoutKeys.NODE_ID_DP_KEYandLayoutKeys.EDGE_ID_DP_KEY. - 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
EdgeRoutingStyleenum has been renamed toEdgeRouterRoutingStyle. -
The
EdgeRoutingStyleenum has been renamed toSingleLayerSubtreePlacerRoutingStyle. -
The
LayeredRoutingStyleenum has been renamed toLevelAlignedSubtreePlacerRoutingStyle. -
The
EdgeRoutingStrategyenum has been renamed toRadialLayoutRoutingStyle. -
The
EdgeRoutingStrategyenum has been renamed toPartialLayoutRoutingStyle. -
The
EdgeRoutingStyleenum has been renamed toHierarchicalLayoutRoutingStylewhile 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 nowInsets.EMPTY,Size.EMPTYandInsets.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 typePoint[] is now used in API members.-
Changed value to of
HierarchicLayout.ALTERNATIVE_EDGE_PATH_DP_KEY,ClearAreaLayout.EXPANDED_NODE_ORIGINAL_EDGE_PATH_DP_KEYandGivenCoordinatesStage.EDGE_PATH_DP_KEYtoIEnumerable<.Point> -
Changed
EdgeRouterBusDescriptorpropertiesbusPointsandcomputedBusPointsto typePoint[].
-
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.GROUP_DP_KEY,GroupingKeys.NODE_ID_DP_KEYandGroupingKeys.PARENT_NODE_ID_DP_KEYwhich 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 newLayoutEdge.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.LAYER_INDEX_RESULT_DATA_KEY,HierarchicalLayout.SEQUENCE_INDEX_RESULT_DATA_KEY,GivenLayersAssigner.LAYER_INDEX_DATA_KEY,RadialLayout.LAYER_ID_DATA_KEYandCircularLayout.CIRCLE_ID_RESULT_DATA_KEYhas 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, properties, and namespaces 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.INCREMENTAL_HINTS_DP_KEYinINCREMENTAL_NODE_HINTS_DATA_KEYandINCREMENTAL_EDGE_HINTS_DATA_KEY. -
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.EDGE_LAYOUT_DESCRIPTOR_DP_KEYtoHierarchicalLayout.EDGE_DESCRIPTOR_DATA_KEY. -
Renamed
HierarchicLayoutData.edgeLayoutDescriptorstoedgeDescriptors. -
Renamed
NodeLayoutDescriptortoHierarchicalLayoutNodeDescriptor. -
Renamed
HierarchicLayout.nodeLayoutDescriptortodefaultNodeDescriptor. -
Renamed and moved
HierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DP_KEYtoHierarchicalLayout.NODE_DESCRIPTOR_DATA_KEY. -
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.LAYER_ID_DP_KEYtoLAYER_INDEX_DATA_KEY. -
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. -
EdgeRouterBusDescriptoris renamed toGridComponentDescriptor. -
HierarchicLayout.BUS_DESCRIPTOR_DP_KEYis renamed toGRID_COMPONENT_DESCRIPTOR_DATA_KEY. -
HierarchicLayoutData.busesis renamed togridComponents. -
HierarchicLayoutData.busRootOffsetsis renamed togridComponentRootOffsets. -
NodeDataType.BUS_STRUCTURE_DUMMYis renamed toGRID_COMPONENT_BUS_NODE. -
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.REDIRECTED_GROUP_EDGEhas 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
NodeDataTypetoHierarchicalLayoutNodeTypeand its valueNormaltoHierarchicalLayoutNodeType.REGULAR. -
Renamed
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 fromoptimizeAfterLayeringandoptimizeAfterSequencingForSingleNodetoselectAfterLayeringandIPortCandidateSelector.selectAfterSequencing. PortConstraintOptimizerBasehas been removed.-
PortCandidateOptimizerhas been renamed toPortCandidateSelectorand its properties have been renamed:backLoopPenaltytobackLoopCost,crossingPenaltytocrossingCost, andoverUsagePenaltytooverUsageCost. -
The
IPortCandidateMatcherinterface 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.LAYER_CONSTRAINTS_MEMENTO_DP_KEYandHierarchicLayout.SEQUENCE_CONSTRAINTS_MEMENTO_DP_KEY. -
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
RotatableNodePlacerMatrixwith theSubtreeTransformenum and renamed constants:-
RotatableNodePlacerMatrix.DEFAULTtoSubtreeTransform.NONE. -
RotatableNodePlacerMatrix.MIR_HORtoSubtreeTransform.FLIP_Y. -
RotatableNodePlacerMatrix.MIR_VERTtoSubtreeTransform.FLIP_X. -
RotatableNodePlacerMatrix.ROT90toSubtreeTransform.ROTATE_LEFT. -
RotatableNodePlacerMatrix.ROT180toSubtreeTransform.ROTATE_180. -
RotatableNodePlacerMatrix.ROT270toSubtreeTransform.ROTATE_RIGHT. -
RotatableNodePlacerMatrix.MIR_VERT_ROT90toSubtreeTransform.ROTATE_RIGHT_FLIP_Y. -
RotatableNodePlacerMatrix.MIR_HOR_ROT90toSubtreeTransform.ROTATE_LEFT_FLIP_Y.
-
-
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.STRAIGHT_LINE_TO_CHILD_CONNECTOR,RoutingStyle.FORKproperty toSingleLayerSubtreePlacerRoutingStyle.ORTHOGONAL, andRoutingStyle.FORK_AT_ROOTproperty toSingleLayerSubtreePlacerRoutingStyle.ORTHOGONAL_AT_ROOT. -
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.HORIZONTAL_DOWNWARDvalue now maps toSubtreeTransform.NONE,ChildPlacement.HORIZONTAL_UPWARDtoSubtreeTransform.FLIP_Y,ChildPlacement.VERTICAL_TO_LEFTtoSubtreeTransform.ROTATE_RIGHT, andChildPlacement.VERTICAL_TO_RIGHTtoSubtreeTransform.ROTATE_LEFT_FLIP_Y. -
Renamed
RootNodeAlignment.CENTER_OVER_CHILDRENtoSubtreeRootAlignment.CENTER_OF_CHILDREN. -
Renamed
RootNodeAlignment.LEADINGtoSubtreeRootAlignment.LEFT,RootNodeAlignment.TRAILINGtoSubtreeRootAlignment.RIGHT,RootAlignment.LEADING_OFFSETtoSubtreeRootAlignment.LEADING, andRootAlignment.TRAILING_OFFSETtoSubtreeRootAlignment.TRAILING. -
Renamed
IPortAssignmenttoITreeLayoutPortAssigner. -
Renamed
DefaultPortAssignmenttoTreeLayoutPortAssigner. -
Renamed
TreeLayout.PORT_ASSIGNMENT_DP_KEYtoPORT_ASSIGNER_DATA_KEY. -
Renamed
TreeLayoutData.portAssignmentstoportAssigners. -
Removed the
NodePlacerBaseclass. ImplementISubtreePlacerinterface instead. -
Removed the method
PlaceSubtree(LayoutNode,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. -
TreeLayoutPortAssignmentModevaluePortConstrainthas been removed. Port candidates are always considered if they are specified. -
TreeLayoutPortAssignmentModevaluesDISTRIBUTED_EAST,DISTRIBUTED_WEST,DISTRIBUTED_NORTH,DISTRIBUTED_SOUTHhave 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 singleRectparameter 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
ChainLayoutStyletoOrthogonalLayoutChainSubstructureStyle. -
Renamed
CycleLayoutStyletoOrthogonalLayoutCycleSubstructureStyle. -
Renamed
TreeLayoutStyletoOrthogonalLayoutTreeSubstructureStyle. -
Renamed
EdgeLayoutDescriptortoOrthogonalLayoutEdgeDescriptor. -
Renamed
OrthogonalLayout.edgeLayoutDescriptortodefaultEdgeDescriptor. -
Renamed
OrthogonalLayout.EDGE_LAYOUT_DESCRIPTOR_DP_KEYtoEDGE_DESCRIPTOR_DATA_KEY. -
Renamed
OrthogonalLayoutData.edgeLayoutDescriptorstoedgeDescriptors. -
The
LayoutStyleenum (belonging to theOrthogonalLayout) has been renamed toOrthogonalLayoutMode. Furthermore, the new values are Strict (former Default),FORCED_STRAIGHT_LINE(former Box) , and Relaxed (formerFIXED_MIXED). The former values Uniform,FIXED_BOX, 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 calledOrthogonalLayoutChainSubstructureStyle,chainSubstructureSize,OrthogonalLayoutTreeSubstructureStyle,treeSubstructureSize,treeSubstructureOrientation,OrthogonalLayoutCycleSubstructureStyle,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.EDGE_DIRECTEDNESS_DATA_KEY. -
PartialLayout.DIRECTED_EDGES_DP_KEYis renamed toEDGE_ORIENTATION_DATA_KEYand 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.ROUTED_PARALLEL_EDGES_DP_KEYtoROUTED_MULTI_EDGES_RESULT_DATA_KEY. -
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
Gridhas been removed. -
Renamed
EdgeLayoutDescriptortoEdgeRouterEdgeDescriptor. -
Renamed
CurveEdgeLayoutDescriptortoCurveRoutingEdgeDescriptor. -
Renamed
EdgeRouter.EDGE_LAYOUT_DESCRIPTOR_DP_KEYtoEDGE_DESCRIPTOR_DATA_KEY. -
Renamed
EdgeRouter.defaultEdgeLayoutDescriptortodefaultEdgeDescriptor. -
Renamed
EdgeRouter.getEdgeLayoutDescriptortogetEdgeDescriptor. -
Renamed
EdgeRouterData.edgeLayoutDescriptorstoedgeDescriptors. -
Renamed
PathSearchContext.currentEdgeLayoutDescriptortocurrentEdgeDescriptor. -
Renamed
CurveRoutingStage.defaultEdgeLayoutDescriptortodefaultEdgeDescriptor. -
Renamed
CurveRoutingStage.CURVE_EDGE_LAYOUT_DESCRIPTOR_DP_KEYtoEDGE_DESCRIPTOR_DATA_KEY. -
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.NODE_LABEL_CROSSING_COST_FACTORS_KEYtoEdgeRouter.NODE_LABEL_CROSSING_COST_FACTOR_DATA_KEY. -
Renamed and moved data key
PartitionCellKeys.EDGE_LABEL_CROSSING_COST_FACTORS_KEYtoEdgeRouter.EDGE_LABEL_CROSSING_COST_FACTOR_DATA_KEY. -
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 toSeriesParallelLayoutRoutingStyle. 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.edgeProcessingComparatorinstead. -
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,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
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.IGNORE_GROUP_LABELS. -
The already obsolete properties
EdgeRouter.polylineRouting,EdgeRouter.preferredPolylineSegmentLengthandEdgeRouter.maximumPolylineSegmentRatiohave been removed. They are replaced by respective properties on theEdgeRouterEdgeDescriptorclass. -
Replaced
EdgeRouter.edgeComparerproperty of typeIComparerwithEdgeRouterData.edgeProcessingComparatorof 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 typesLayoutNodeLabelandLayoutEdgeLabel. -
Removed
LayoutGraph.getLabelLayout. Labels can instead be retrieved usingLayoutNode.labelsandLayoutEdge.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 usingLayoutNodeLabel.absolutePlacementandLayoutEdgeLabel.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.ABSOLUTE_WITH_LEFT_IN_NORTHtoABSOLUTE_WITH_LEFT_ABOVE. -
Renamed
LabelSideReferences.ABSOLUTE_WITH_RIGHT_IN_NORTHtoABSOLUTE_WITH_RIGHT_ABOVE. -
Values of
DiscreteNodeLabelPositionsenum have been renamed.-
INTERNAL_MASKtoINSIDE. -
EIGHT_POS_MASKtoDiscreteNodeLabelPositions.OUTSIDE. -
SIDES_MASKtoSIDES. -
CORNER_MASKtoRectangleCorners. - Removed value
SANDWICH_MASK.
-
-
Values of
DiscreteNodeLabelPositionshave been renamed:-
DiscreteNodeLabelPositions.TOP,DiscreteNodeLabelPositions.TOP_LEFT, ... have been renamed toTOP_INSIDE,TOP_LEFT_INSIDE, ... -
DiscreteNodeLabelPositions.NORTH,DiscreteNodeLabelPositions.NORTH_WEST, ... have been renamed toDiscreteNodeLabelPositions.TOP,DiscreteNodeLabelPositions.TOP_LEFT, ...
-
-
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.EDGE_LABEL_PREFERRED_PLACEMENT_DATA_KEY.
-
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.SUBSTRUCTURE_SOURCE_GROUP_ID_DATA_KEYinstead ofLayoutKeys.SOURCE_EDGE_GROUP_ID_DATA_KEY. -
Renamed
OrganicLayoutData.targetGroupIdstosubstructureTargetGroupIds.OrganicLayoutnow usesOrganicLayout.SUBSTRUCTURE_TARGET_GROUP_ID_DATA_KEYinstead ofLayoutKeys.TARGET_EDGE_GROUP_ID_DATA_KEY. -
Renamed the
OrganicLayout.GROUP_NODE_MODE_DP_KEYproperty toGROUP_NODE_HANDLING_POLICY_DATA_KEY. -
OrganicLayoutTreeSubstructureStyle.BALLOONhas been renamed toRADIAL_TREE. -
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
GroupNodeMode.NORMALtoGroupNodeHandlingPolicy.FREE. -
The
OrganicLayoutclass no longer offers valueOrganicLayoutClusteringPolicy.USER_DEFINED. Now, cluster IDs provided by users viaOrganicLayoutData.clusterIdsproperty or data keyOrganicLayout.CLUSTER_ID_DATA_KEYare always considered first. If none are defined, the specifiedOrganicLayout.clusteringPolicyis considered. -
Removed the
clusterNodesproperty fromOrganicLayout. It is replaced byOrganicLayoutClusteringPolicyproperty. To disable the clustering, specifyOrganicLayoutClusteringPolicy.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.PRESERVE_RELATIVE_LOCATIONS. -
Removed
OrganicLayoutConstraintFactoryandOrganicLayout.createConstraintFactory. UseOrganicLayoutData.constraintsinstead. -
OrganicConstraintData.addFloatingBoundingBoxnow acceptsSizeits deconstructed values. -
OrganicConstraintData.addFloatingBoundingBoxnow acceptsRectits 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 toPACKED_CIRCLE. -
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
InteractiveOrganicLayoutalgorithm no longer implements theILayoutAlgorithminterface. -
The
InteractiveOrganicLayoutExecutionContexthas been removed. Call directlyInteractiveOrganicLayout.startLayoutto start the layout calculation. -
The
InteractiveOrganicLayout.stop method has been renamed toInteractiveOrganicLayout.stopLayout. -
The methods
InteractiveOrganicLayout.applyLayout,InteractiveOrganicLayout.stopAndWait,InteractiveOrganicLayout.cancelAndWaithave been removed. -
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
SingleCycleLayouthas been removed. TheCircularLayoutwithCircularLayoutPartitioningPolicyset toSINGLE_CYCLEcan 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 toCircularLayoutPartitioningPolicyto better reflect the fact that it controls how nodes are partitioned. The corresponding enum has also been renamed from toCircularLayoutPartitioningPolicy. -
Removed the enum value
CircularLayoutEdgeRoutingPolicy.MARKED_EXTERIOR. To manually select which edges should be routed externally, use theCircularLayoutData.exteriorEdgesproperty instead. -
Renamed
CircularLayout.layoutStyletoCircularLayout.partitioningPolicy. -
Renamed
LayoutStyletoCircularLayoutPartitioningPolicy. -
Removed the enum value
LayoutStyle.CUSTOM_GROUPS. If custom partitions are specified usingCircularLayoutData.partitions, they are respected by theCircularLayoutautomatically. -
The
INodeSequencerclass has been removed from the API. Use the newCircularLayoutData.nodeComparatorproperty to specify custom node orders.
Incompatible Behavior Changes
-
PartitionDescriptor.initialAngleis measured in degrees rather than radians. -
The default style of the
CircularLayout'sComponentLayoutis changed toPACKED_CIRCLE. -
The
CircularLayoutnow considers node labels by default. -
The
CircularLayoutnow places edge labels by default using a generic labeling algorithm.
Radial Layout
Incompatible API Changes
-
Renamed the
RadialLayout.minimumNodeToNodeDistanceproperty tominimumNodeDistance. -
Renamed the
RadialLayout.minimumEdgeToEdgeDistanceproperty tominimumEdgeDistance. -
RadialLayoutNodeInfohas been renamed toRadialLayoutNodePlacementResult. -
Renamed
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.CENTER_NODES_DATA_KEYthat 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 toPACKED_CIRCLE. -
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.MARKED_NODEShas been removed. To define specific parents for interleaved placed child nodes use theRadialTreeLayoutData.interleavedNodesproperty. -
The enum value
RootNodePolicy.SELECTED_ROOThas been removed. A custom root node is now always used if defined viaRadialTreeLayoutData.treeRootproperty. -
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 toPACKED_CIRCLE. -
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.childNodeComparatorof type Comparison function.
Incompatible Behavior Changes
-
The default style of the
RadialGroupLayout's (formerlyCactusGroupLayout's)ComponentLayoutis changed toPACKED_CIRCLE. -
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
ForkStyleandTreeLayoutPortAssignmentModehave been integrated into theTreeLayoutPortAssignmentModeenum, and theForkStyleenum has been removed. -
DefaultPortAssignment.forkStylehas been removed. -
Renamed
IPortAssignmenttoISeriesParallelLayoutPortAssigner. -
Renamed
DefaultPortAssignmenttoSeriesParallelLayoutPortAssigner. -
Renamed
SeriesParallelLayout.PORT_ASSIGNMENT_DP_KEYtoPORT_ASSIGNER_DATA_KEY. -
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.EDGE_LAYOUT_DESCRIPTOR_DP_KEYtoEDGE_DESCRIPTOR_DATA_KEY. -
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
-
The
MultiPageLayout.createProxyReferenceNodesproperty has been renamed touseProxyReferenceNodes. -
The
EdgeBundleModesenum and the associated properties have been renamed toMultiEdgeConnectorPolicy. The enum values have been renamed toSEPARATE,SHARE_FOR_SAME_DIRECTIONandSHARE, respectively. The correspondingEdgeDataKeyhas been renamed toMULTI_EDGE_CONNECTOR_ID_DATA_KEY(previouslyEDGE_TYPE_DP_KEY). -
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
NodeTypetoMultiPageNodeTypeand its valueNormaltoMultiPageNodeType.REGULAR. -
Renamed
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.EDGE_TYPE_DP_KEY, andMultiPageLayoutData.edgeTypeshave been renamed toMultiPageLayout.multiEdgeConnectorPolicy,MultiPageLayout.MULTI_EDGE_CONNECTOR_ID_DATA_KEY, andMultiPageLayoutData.multiEdgeConnectorIds.
Partial Layout
Incompatible API Changes
-
Renamed
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.NODE_LAYOUT_DESCRIPTOR_DP_KEYtoNODE_DESCRIPTOR_DATA_KEY. -
Renamed
TabularLayoutData.nodeLayoutDescriptorstonodeDescriptors. -
Renamed
TabularLayoutPolicytoTabularLayoutMode. -
Replaced
TabularLayout.nodeComparerproperty of typeIComparerwithTabularLayoutData.freeNodeComparatorof type Comparison function. -
The
TabularLayoutclass now features its own data key (LAYOUT_GRID_CELL_DESCRIPTOR_RESULT_DATA_KEY) where it will publish cell IDs of nodes that it explicitly assigned to the cells. Previously it reused the common data keyPartitionGrid.PARTITION_CELL_ID_DP_KEY.
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.MODIFIER_NO_OVERLAPwithTRY_KEEP_CENTERS. -
Replaced
ComponentArrangementStyles.MODIFIER_AS_ISwithComponentLayout.fromSketchMode.
- Removed
-
Renamed
ComponentLayout.calculateBoundstocalculateComponentBounds. -
Renamed
ComponentLayout.setOrigintosetComponentLocation. -
The
IsolatedGroupComponentLayoutclass has been removed. -
Renamed
ComponentArrangementStyles.NONEtoComponentArrangementStyle.KEEP_CENTERS. -
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.PACKED_CIRCLEandComponentArrangementStyle.PACKED_RECTANGLEnow consider the convex hulls of components to determine overlaps.
Tree Map Layout
Incompatible API Changes
-
Renamed
TilingPolicytoTilingStrategyandTreeMapLayout.tilingPolicytoTreeMapLayout.tilingStrategy. -
Replaced
TreeMapLayout.nodeComparerproperty of typeIComparerwithTreeMapLayoutData.childNodeComparatorof type Comparison function. - Removed the
NodeWeightComparerclass.
Recursive Group Layout
Incompatible API Changes
-
RecursiveGroupLayout.NULL_LAYOUTis renamed toRecursiveGroupLayout.FIX_CONTENT_LAYOUT. -
FixGroupLayoutStageis removed and its functionality is replaced byRecursiveGroupLayoutusingRecursiveGroupLayout.FIX_GROUP_LAYOUTfor all groups. -
The
RecursiveGroupLayoutclass now ignores empty group nodes by default (seeconsiderEmptyGroupsproperty). -
The signature of
ILayoutGroupBoundsCalculator.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
SwimlanesandSwimlaneRepresentative. - 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.PARTITION_GRID_DP_KEY. The keyLayoutGrid.LAYOUT_GRID_CELL_DESCRIPTOR_DATA_KEYis now the only data key which can be used to specify layout grids. -
Removed data key
RecursiveGroupLayout.GROUP_NODE_PARTITION_GRID_DP_KEY. The keyLayoutGrid.LAYOUT_GRID_CELL_DESCRIPTOR_DATA_KEYis 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.FIXED_NODE_DP_KEYtoNODE_ANCHORING_POLICY_DATA_KEY. -
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 toIntersection. -
Renamed
ParallelEdges.findParallelEdgestoLayoutGraphAlgorithms.findMultiEdges. -
Removed the
BfsDirectionenum. UseTraversalDirectioninstead. -
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
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
NodeAggregationclass has been renamed toLayoutGraphNodeAggregation, emphasizing that this class is intended for users working with theLayoutGraphAPI only.-
Furthermore, its member
NODE_TYPE_DP_KEYhas been removed. The replacement is keyLayoutKeys.NODE_TYPE_DATA_KEY. -
Also, its member
NODE_CENTER_DP_KEYhas 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
EUCLIDEAN_SQUAREDfromDistanceMetricenum. 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
NodeAggregationNodeTypeHandlingPolicyenum 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
LinkagewithHierarchicalClusteringLinkage. -
Renamed
SubstructuretoSubstructureItems. -
Renamed
ComponenttoConnectedComponent.
Collections
Incompatible API Changes
- The
YList.elementAtmethod was removed. -
Renamed
ItemMapping.delegatetomapperFunction. - Renamed
ItemCollection.delegateto predicate. -
Renamed
IUndoUnit.createDelegateUnittofromHandler. -
Renamed
IAnimation.fromDelegatetofromHandler. -
Renamed
IMapper.fromDelegatetofromHandler. -
The
elementAtmethod on theIEnumerableinterface was removed. Use theatmethod, instead. -
The
skipmethod on theIEnumerableinterface is now calleddropand no longer has athisArgparameter to match the counterpart in the ECMAScript Iterator Helpers stage 3 proposal. -
The
skipWhilemethod on theIEnumerableinterface is now calleddropWhileand no longer has athisArgparameter. -
The
distinct,groupBy, andsummethods on theIEnumerableinterface no longer have athisArgparameter. -
The
listclass constructor no longer has athisArgparameter. -
The
firstandlastmethods on theIEnumerableinterface no longer accept a predicate function. UsefindandfindLastinstead. -
The predicate function of the
findandfindLastmethods on theIEnumerableinterface is no longer optional. -
The parameter of the
includesmethod on theIEnumerableinterface is no longer nullable. -
The
orderBymethod of theIEnumerableinterface is now calledtoSorted. ThekeySelectorparameter was removed to match the signature ofArray.toSorted. -
The
orderByDescendingmethod has been removed theIEnumerableinterface. -
The
sortmethod has been removed from classYList. -
The
sortmethod with theIComparerparameter has been removed from classList.<T> -
Renamed
ICursor.prevtoICursor.previous. -
Renamed
ListCell.succtoListCell.next. -
Renamed
ListCell.predtoListCell.previous. -
Removed the
isEmptymethod fromYListclass. TestYList.sizeproperty 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.
Incompatible Behavior Changes
-
The
first,lastandfindLastmethods on theIEnumerableinterface now returnnullinstead of throwing when no element was found. -
The
atmethod on theIEnumerableinterface now returnsnullinstead ofundefinedwhen out of range.
Geometry
Incompatible API Changes
-
The
GeomUtilitiesclass has been renamed toGeometryUtilities. - Implicit and explicit conversion operators between yFiles geometry types and the platform geometry types have been removed.
-
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 thesizeproperty, instead. -
The
GetBoundsoverload of theGeneralPathclass that returns the approximate bounds for BΓ©zier segments is now calledgetApproximateBounds. -
The copy constructors on the
Rect,Point, andSizeclasses were removed. Use thetoRect,toPoint, ortoSizemethods respectively instead. -
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. UsePoint.getProjectionOnSegmentmethod instead. -
Removed the methods
distanceToLineSegmentof Geom class. UsePoint.distanceToSegmentmethod instead. -
The
IRectangleinterface no longer implementsIPoint. You can get the top-left corner of a rectangle with itstopLeftmethod. 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. -
Renamed the
LineSegment.xOffsetproperty toyIntercept. - Made
LineSegmentclass sealed. -
Renamed the
LineSegment.isInXIntervallmethod toLineSegment.isInXIntervalandLineSegment.isInYIntervallmethod toLineSegment.isInYInterval.