Release notesyFiles for HTML
yFiles for HTML
Version 3.0
Version 3.0 is the latest major release for yFiles for HTML.
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 the About yFiles for HTML Version 3 page on our yfiles.com website.
Below you will find the technical requirements and a list of all changes, including new features and incompatible changes.
What to expect on this page
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
New Features, Improvements, and Bug Fixes
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
, andYString
types and the$class
member. -
The event listener API for yFiles events is now similar to JavaScript's
EventTarget
. Each event sender now has a singleaddEventListener
andremoveEventListener
method 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 specificEventArgs
object and the sender instance. The options support automatic event deregistration via theAbortController
API and single (once
) event invocation with automatic deregistration. -
The lookup API has been restructured. In particular, the
LookupDecorator
class is now easier to use, but most use cases are covered without having to access the low-level lookup architecture. - 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
undefined
to 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 library now prevents problems with strict CSP settings, as we now set CSS styles with the
HTMLElement.style
property instead of thestyle
attribute.
See the related incompatible changes.
Graph
New Features and Improvements
-
The new
IGraph.getEdgesBetween
method returns all edges between two ports or port owners. -
CompositeLabelModel
now 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.addParameter
method wraps a given parameter of one of the composed label models. -
The methods of
IGraph
now check consistently whether given geometric arguments are neither infinite norNaN
. -
The rotation direction of
OrientedRectangle
,LayoutNodeLabel
,LayoutEdgeLabel
andFreeEdgeLabelModel
is 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
, andInteriorStretchLabelModel
have been renamed toExteriorNodeLabelModel
,InteriorNodeLabelModel
, andStretchNodeLabelModel
, respectively, to make it clear that only nodes are supported as label owner for these models. -
The implementations of
ILabelModelParameter
andIPortLocationModelParameter
used by the publicILabelModel
andIPortLocationModel
classes are now public and provide all properties necessary to recreate them on the models. Consequently, the staticdeserializeParameter
andserializeParameter
methods of theILabelModelParameter
andIPortLocationModelParameter
classes, which could be used to retrieve those properties and recreate the parameter, have been removed. -
The
ILabelModel
parameter of theILabelModelParameterFinder.findBestParameter
andILabelModelParameterProvider.getParameters
methods has been removed as it was only very rarely required. -
The
GraphCopier
API has been enhanced to offer improved clarity and functionality.-
The
GraphCopier
has been optimized since its support for theGraphClipboard
has been removed. -
The
GraphCopier.copy
method now uses anIEnumerable
of items to define the subset to copy.
-
The
-
The
SimpleNode
,SimpleEdge
,SimpleBend
,SimpleLabel
, andSimplePort
classes now provide a convenienceLookupDecorator
instance through theGetDecorator
method. -
The
ILabelModel.createDefaultParameter
method and most of its implementations have been removed as it was often unclear what “default” meant. Most label models already had a correspondingCreate*Parameter
method. For the remaining models, theGroupNodeLabelModel.createTabParameter
method and theFreeNodeLabelModel.CENTER
andFreePortLabelModel.CENTER
fields 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.groupNodes
method now has optional parameters that specify thestyle
andtag
of the newly created group. -
The static parameter fields of
FreeNodePortLocationModel
have been renamed analogue to the static parameter fields inInteriorNodeLabelModel
. -
FilteredGraphWrapper
now supports changing the node and edge predicates after creation. -
The
property-changed
event on theUndoEngine
class is now also emitted if the token is changed. -
The new static
ITable.getTable
method returns theITable
instance of a node if there is one. -
The types of
IModelItem.tag
properties are now easier to customize. See the "Augmenting the tag property" section in the Developer's Guide for more details.
Bug Fixes
-
Fixed
EdgeSegmentLabelModel
andSmartEdgeLabelModel
label placement at source and target nodes when using indices less than 0 or greater than the number of bends in the edge. -
The
EdgeSegmentLabelModel
class now calculates valid label locations for selfloop paths with one port at the side of the node. -
The
EdgeSegmentLabelModel
class now calculates valid label locations for paths with duplicate bends, i.e., paths in which two or more consecutive bends have the same location. -
The
GraphClipboard
'sparentNodeDetection
now can useParentNodeDetectionModes.NONE
as fallback if no valid parent is found for modesParentNodeDetectionModes.SELECTION
orParentNodeDetectionModes.PREVIOUS_PARENT
.
See the related incompatible changes.
Components
New Features and Improvements
-
ViewportLimiter
now also works with isometric projections and offers options to use theCanvasComponent.contentBounds
for 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.CanvasComponent
now also notifies the viewport limiter when the size of thecontentBounds
or the size of theCanvasComponent
changes. -
Added a
pointer-cancel
event to theCanvasComponent
. -
The
SvgExport.exportSvgAsync
method 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
GraphComponent
can now be customized with a few lines of CSS.-
The available values for the
--
variable areyfiles-theme-variant
round
andsquare
with solid strokes, and the newsquare-round
andsquare-hatched
with 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
Theme
class has been removed.
-
The available values for the
-
The scrollbars of a
CanvasComponent
are 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
-
GraphComponent
now usesGraphViewerInputMode
as the defaultinputMode
for basic graph exploration. -
The
ICanvasContext.canvasComponent
property (and consequentlyIRenderContext
andIInputModeContext
) is now guaranteed to have a non-null
value. -
All predefined
EventRecognizer
constants 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 onCanvasComponent
which are related to input devices now have the same consistent names. -
The
CanvasComponent.contentRect
property is now namedcontentBounds
to make its purpose more clear. -
The superfluous
CanvasComponent.setContentRect
method has been removed in favor of the setter of thecontentBounds
property. -
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
CanvasComponent
moved 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 anHtmlVisual
or an overlay panel. -
CanvasComponent
constructor now acceptsHTMLElement
as hosting element instead ofHTMLDivElement
. This allows initialization of theCanvasComponent
in semantic elements and custom elements. -
The
CanvasComponent.focus
method now has an optional parameter that takes an options object with apreventScroll
property, similar to theHTMLElement.focus
method. This replaces theCanvasControl.PreventFocusScroll
property.
New Demos
-
New Viewport Limiter demo shows the improved behavior of the
ViewportLimiter
class. - The new timeline demo shows how to implement a timeline component for graphs that change over time.
Bug Fixes
- Fixed an issue where a sequential animation would break when the preferred duration was set to zero.
See the related incompatible changes.
Rendering
New Features and Improvements
-
The new
ObjectRendererBase
class allows conveniently implementing theIObjectRenderer
interface. -
New classes formalize the data that is passed as
RenderTag
to implementations ofIObjectRenderer
.-
The new
PortCandidateRenderTag
class will be passed as render tag for port candidates. -
The new
MarqueeRenderTag
class will be passed as render tag for the marquee rectangle renderer of theMarqueeSelectionInputMode
class. -
The new
LassoPathFinishRegionRenderTag
class will be passed as render tag for the finish region renderer of theLassoSelectionInputMode
class. The newLassoPathState
enum defines the current state of the lasso selection path in this class. -
The new
LabelCandidateRenderTag
class will be passed as render tag to the label candidate renderer of theLabelPositionHandler
.
-
The new
-
The new
RenterTree.VoidObjectRenderer
constant provides a singleton renderer that renders nothing.
See the related incompatible changes.
Selection, Focus, Highlight
New Features and Improvements
-
The new
domain
property on theHighlightIndicatorManager
class matches thedomain
property on theSelectionIndicatorManager
class and allows automatic removal of highlights no longer present in the domain. -
FocusIndicatorManager
supports a new policy that will only show the keyboard focus indicator, when the user is actually using the keyboard to manipulate the focus.
See the related incompatible changes.
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
, andCompositePortStyle
classes. -
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
, orDelegatingPortStyle
class. -
The new
ShapePortStyle
class displays ports as geometric shapes and supports the same shapes as theShapeNodeStyle
class. -
The
Arrow
class 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.edgePathCropper
for this.
-
There are three new shapes that are similar to what is available in common drawing apps:
-
The new
PathEdgeStyleBase
class simplifies using a complexGeneralPath
as 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
ShapeNodeStyle
class 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
GeneralPathNodeStyle
class. -
The
WebGLShapeNodeStyle
andWebGLImageNodeStyle
classes, and the WebGL selection visualization now support triangle shapes pointing down, left, and right as well as a diamond shape. -
TextWrapping
supports 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.clipText
andMarkupLabelStyle.clipText
properties is now available with theTextWrapping.CLIP
value, and the defaultwrapping
policy of these styles is nowTextWrapping.WRAP_WORD_ELLIPSIS
. -
The
ImageNodeStyle
andIconLabelStyle
classes can now have a background visual. The shape of this background can be one of the values ofShapeNodeShape
. -
The new
CssFill
class is a fill that supports CSS color values. -
Group nodes and nodes with
GroupNodeStyle
now 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
CollapsibleNodeStyleDecorator
class positions and styles the button now closer to whatGroupNodeStyle
does to achieve a more modern look. -
The new
getLassoTestable
method of the interfacesINodeStyleRenderer
,IEdgeStyleRenderer
,ILabelStyleRenderer
, andIPortStyleRenderer
is similar to the existinggetMarqueeTestable
method, so marquee and lasso selection do no longer differ in the ways the testable is retrieved. -
The
IconLabelStyle
now has a default icon size of 24x24 instead of empty, such that the icon is always visible. -
ShapeNodeStyle
now 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
CssFill
class for input strings. -
The Color class is now a fill and can therefore be used wherever the
SolidColorFill
class was previously used. The latter has therefore been removed. -
CollapsibleNodeStyleDecorator
has new methods for creating a custom button visualization. - The default line spacing has been reduced to 0.2 to better match the platform defaults.
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.
Bug Fixes
-
For
IconLabelStyle
thewidth
andheight
of the rendered icon are no longer swapped. -
When the label text is rendered using the
TextRenderSupport.addText
method and wrapping is word-ellipsis or character-ellipsis, an ellipsis character is now always added when necessary. -
The
TextRenderSupport.addText
method 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
ArrowNodeStyle
that are filled with a gradient do not rotate the fill along with the arrow, anymore.
See the related incompatible changes.
WebGL
New Features and Improvements
-
The new
WebGLArrowType.CROP_AT_PORT
enum value enables cropping similar to the newIArrow.cropAtPort
property. -
The
WebGLLabelStyle
andWebGLIconLabelStyle
classes now support different paddings per direction. -
The automatic conversion of
LabelStyle
toWebGLLabelStyle
now considers the minimumLabelStyle.padding
(if uniform padding is not set) to prevent text misplacement or disappearance. -
WebGL2 styles can now be set directly via the
IGraph
. - Decorator styles for WebGL2 and SVG rendering simplify style handling on rendering type switch.
- Automatic conversion for WebGL2 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. -
WebGLLabelStyle
now 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.
See the related incompatible changes.
Interaction
New Features and Improvements
-
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
Alt
key can now be pressed instead of theCtrl
key. -
When resizing a node using its reshape handles, the
Ctrl
key instead of theAlt
key can be pressed to keep the center of the reshaped node. -
To reparent a node to another parent during a drag gesture, the
Ctrl
key has to be pressed instead of theShift
key.
-
To temporarily disable snapping during edge creation, moving, or resizing items, the
- Reconnecting edges to other nodes is now allowed per default.
- Elements can now be moved without selecting them first.
-
When editing label text, users can now enter newlines with
Shift+Enter
in addition toCtrl+Enter
/Command+Enter
. -
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
ContextMenuInputMode
has been improved and its event handling was simplified. -
Marquee and lasso selection have been enhanced to support multiple selection policies. While the default gestures
replaces the selection, pressing the
Ctrl
,Shift
, orAlt
modifier during the gestures extends, subtracts or toggles the current selection with the elements in the marquee or lasse area. -
The
IHitTester
interface has been changed to support faster hit testing. The generic type has been removed. Instead, aGraphItemTypes
parameter has been added that is used to reduce hit tests to the specified item types. -
The new
pointer-long-press
event is available for all pointer input types and replaces the specificTouchLongPress
event. -
The new
pointer-long-rest
event is raised when the pointer stays still for a configurable amount of time during a move or drag gesture. -
All events of an
IInputMode
which report creation of, changes to, or deletion of model items now have arguments of typeInputModeItemEventArgs
orInputModeItemChangedEventArgs
. This type provides the affected item and theIInputModeContext
for the involved input mode. -
Moving items interactively now supports constraining the move gesture to an octilinear direction. This constraint is
used when pressing the
Shift
key while dragging the items. -
The new
GraphEditorInputMode.creationSelectableItems
property allows you to specifyGraphItemTypes
which should be selected after creation. -
The new
CreateEdgeInputMode.edge-direction-reversed
event and the newCreateEdgeInputMode.onEdgeDirectionReversed
method are triggered when the direction of the edge creation changed during edge creation. -
The new
HandleType.VOID
enum value makes a handle invisible and excludes it from hit testing. -
The new
CreateEdgeInputMode.minimumSelfLoopBendCount
property allows for specifying the number of bends an edge must at least have before it can be created as selfloop. -
The new
CreateEdgeInputMode.showStartPortCandidateDelay
property 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.movableUnselectedItems
property allows for defining items which can be moved without selecting them first. ThemovableUnselectedItemsPredicate
property 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
Shift
key while dragging the pointer. -
The new
GraphEditorInputMode.setNodeLocation
method uses theIPositionHandler
of 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 thePointerEvent
API 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
MoveInputMode
class now also handles moving labels, thus theMoveLabelInputMode
was removed. -
The event
items-copied
onGraphViewerInputMode
and the eventsitems-copied
,items-cut
,items-pasted
,items-duplicated
, anddeleted-selection
onGraphEditorInputMode
now useItemsEventArgs
providing the items that are the subjects of the events. -
The
CanvasComponent
now listens to nativePointerEvents
to handle mouse, touch, and stylus input. -
The new
ctrlKey
,shiftKey
,altKey
, andmetaKey
boolean properties ofPointerEventArgs
andClickEventArgs
specify which modify keys were pressed during the event. -
The order of the two parameters of the
EventRecognizer
function has been reversed: Theevent
is now the first one, and the rarely usedsender
the last one. -
The rendering order of visuals created by an
inputMode
now 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.findItems
method now considers the actual z-order of the hit items. -
The
GraphInputMode.item-clicked
event 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. -
MoveViewportInputMode
now gracefully handles concurrent programmatic viewport modifications. -
The modifier for using the
ILabelModelParameterFinder
during label movement can now be changed with theLabelPositionHandler.useParameterFinderRecognizer
property. -
The
ClickInputMode.clicked
event is now raised also for double-clicks and multi-clicks. Clicking multiple times in the same location increments theClickEventArgs.clickCount
by one for each click. -
The
MoveInputMode
andmoveUnselectedInputMode
properties ofGraphEditorInputMode
have been renamed tomoveSelectedItemsInputMode
andmoveUnselectedItemsInputMode
to 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+Space
now prefers toggling the selection state ofGraphComponent.currentItem
over deselecting a single selected item. -
The
IInputMode
API has been updated for clarity: theinputMode
property has been removed from the interface. Instead, most implementations now offer the protectedparentInputModeContext
property 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 protectedcreateInputModeContext
method. The created context has the input mode set as the parent input mode. The newInputModeContext
class 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 theCtrl
orSpace
key. -
The new
Command.ZOOM_TO_SELECTION
zooms 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
GraphComponent
loses the focus. -
GraphViewerInputMode
's andGraphEditorInputMode
'sclickHitTestOrder
now 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+0
orAlt+0
sets the zoom to 100%. -
Alt+1
fits the content in the view. -
Alt+2
brings the selection into the view. -
Alt+3
brings the current item into the view. -
Ctrl+Plus
increases the zoom value. -
Ctrl+Minus
decreases the zoom value. -
Alt+Left
collapses a selected group node. -
Alt+Right
expands a selected folder node. -
Alt+Up
exits the current folder node. -
Alt+Down
enters the current folder node. -
Alt+Shift+Left
orAlt+Shift+Right
toggles the expansion state of a selected group or folder node.
-
-
The
HandleTypes
enums has been refactored to a non-flaggableHandleType
enum, and the values have been adjusted to those used in the library as well as some custom variants for individual use. -
Custom
IHandle
implementations can use the newIHandle.tag
property for various purposes, including custom handle visualizations. yFiles does not use the property and initializes it withnull
, but decorating handles forwards any values unmodified. - Dragging a selected edge doesn't move all its bends anymore which often screwed up the first and last edge segment.
-
The
MouseHoverInputMode
has been renamed toToolTipInputMode
to better reflect its function. -
The
handleIsHit
andgetClosestHitHandle
methods ofHandleInputMode
now have an additional parameter which specifies thePointerType
of the related user gesture. -
The
GraphEditorInputMode.orthogonalEdgeEditingContext
property is now set and enabled per default and may not benull
anymore. Edges can be individually configured to be edited orthogonally by providing an apropriateIOrthogonalEdgeHelper
in their lookup.-
For edges using a
PolylineEdgeStyle
, the style's neworthogonalEditing
property can be set so such a helper is automatically provided. -
To disable orthogonal editing for all edges, the
enabled
property of theOrthogonalEdgeEditingContext
can be set to false. -
To enable orthogonal edge editing for all edges that don't explicitly forbid this, the
OrthogonalEdgeEditingContext.fallbackEdgeHelperProvider
property can be set to a helper supporting orthogonal edge editing.
-
For edges using a
-
NavigationInputMode
now interprets the direction of arrow keys in view coordinates by default. Previously the default settings could lead to surprising behavior when combined with aprojection
onGraphComponent
. - 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. -
LabelDropInputMode
now consults theIEditLabelHelper
of possible drop targets when dragging and dropping labels. -
The
Fill
andStroke
properties ofLassoSelectionInputMode
are now also applied to the finish region (with the default renderer). -
New overloads of the
CreateEdgeInputMode.startEdgeCreation
method can be used to start interactive edge creation from a node or port, respectively. -
The parent node detection of
GraphClipboard
has been streamlined. -
The new
GraphViewerInputMode.hitTester
property works in the same way as theGraphEditorInputMode.hitTester
property. -
The
GraphEditorInputMode.duplicateSelection
method now also dispatchesmulti-selection-started
andmulti-selection-finished
events. -
The items reported by the
HandleInputMode.affectedItems
property now include edges that were modified with the height handle ofBezierEdgeStyle
andArcEdgeStyle
. -
The static member
GraphClipboard.DEFAULT_GRAPH_CLIPBOARD
has been added and is used per default asGraphComponent.clipboard
. This way copy&paste operations work between multipleGraphComponent
instances without the need to set a sharedGraphClipboard
instance first. -
The sub-input modes of
GraphViewerInputMode
andGraphEditorInputMode
can 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
Cursor
constructor now allows the specification of the hot-spot. - Cursors for resize handles now show double-headed arrows on all devices.
-
NodeDropInputMode
,LabelDropInputMode
,StripeDropInputMode
, andPortDropInputMode
now provide a staticDEFAULT_TRANSFER_TYPE
property 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.
New Demos
- the new Mouse Wheel Customization demo shows how to customize and enhance the default mouse wheel behavior.
Bug Fixes
-
GraphInputMode.findItems
method: when the filter includes both edges and bends, the edge will no longer be ignored if any of its bends are hit. -
GraphInputMode.findItems
method: when usingGraphItemTypes.ALL
, bends will not be ignored. Furthermore, the interfacesIBendSelectionTester
andIPortSelectionTester
are properly queried. -
GraphInputMode.findItems
method: Ports with a style are no longer reported twice. -
When moving the viewport in a
GraphComponent
that has a projection, the inertia now works in the right direction. -
Fixed that the
onMarqueeSelect
andonLassoSelect
methods ofGraphEditorInputMode
andGraphViewerInputMode
were called with a wrong input mode context. - Fixed occasionally missing auto-scrolling on viewport bounds for touch devices.
-
The
GraphInputMode.findItems
overload without thecontext
parameter 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.
See the related incompatible changes.
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,AddLabel
andEditLabel
, remain accessible throughGraphEditorInputMode
. - The text editor will now stay open by default if label text validation fails.
-
Each
ILabel
andILabelOwner
now includes a default implementation ofIEditLabelHelper
in itsLookup
. TheIEditLabelHelper
interface 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 methodsAddLabel
andEditLabel
. 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
, andSnapSize
instances are created and are available for theSnapResult
providers. -
Label snapping is now also handled by the
GraphSnapContext
, so theLabelSnapContext
has been removed. Configuration options have been moved fromLabelSnapContext
toGraphSnapContext
. -
Additional improvements:
-
The new
GraphSnapContext.affectedItems
property provides the items for whichSnapResult
shall be collected. -
The configuration options of
GraphSnapContext
are now easier to use and more concise. -
The new protected methods
collectGridSnapReferences
andcollectSameSizeSnapReferences
ofGraphSnapContext
can be overridden to customize theSnapGrid
andSnapSize
instances items can snap to. -
The new
SnapReference
class is now the base class ofSnapLine
, and the newSnapGrid
,SnapSize
, andSnapCircle
classes. The newSnapResult.SnappableItems
property describes which item types may snap to this reference. - Snap references of all types can be styled with CSS classes.
-
The new
OrthogonalSnapLine.croppable
property is used to decide which snap lines to crop ifGraphSnapContext.cropSnapLines
istrue
. -
The new properties
reference
,item
, anditemAnchor
of theSnapResult
class can be used by theIObjectRenderer
for the visualization of theSnapResult
. -
New methods of
ReshapeRectangleContext
simplify the calculation of the bounds for a specified pointer delta or theSnapConstraint
necessary to result in a specified width, height or side location.
-
The new
See the related incompatible changes.
Clipboard
New Features and Improvements
-
Members of
GraphClipboard
andGraphEditorInputMode
withelement
in their name that actually referred to model items were renamed toitem
to clarify their usage. -
The
GraphClipboard.paste
method now accepts an optionalpasteLocation
parameter specifying the center of the bounds of the pasted items. -
The events on
GraphClipboard
now useGraphClipboardEventArgs
that provide the currentIGraphClipboardContext
and theitems
. -
IClipboardHelper
now has methods to supportDuplicate
, too:shouldDuplicate
andonDuplicated
. -
GraphClipboard
'sCut
,Copy
,Paste
, andDuplicate
methods now use anIEnumerable
to determine the subgraph to copy. -
GraphClipboard
now uses an optimizedClipboardGraphCopier
for its clipboard operations instead of the generalGraphCopier
.
See the related incompatible changes.
Folding
New Features and Improvements
- The process of configuring edges at folder nodes has been simplified, resulting in a significant reduction in the number of configuration calls for merged edges.
- The default implementation for folder nodes and folding edge converters has been enhanced, providing more powerful capabilities for synchronizing and initializing various aspects with granularity.
- Collapsed group nodes (folder nodes) can now have different tags from their expanded form (group nodes).
-
Changes made to view states (folder nodes, folding edges) can now be reflected back to the master items. New
methods,
updateGroupNodeState
andupdateMasterEdges
, have been added toIFolderNodeConverter
andIFoldingEdgeConverter
, respectively, for handling these updates.
Bug Fixes
-
Setting the source or target port of an edge to a port at another edge does no longer lead to an exception if the
edge is represented in a managed view (
IFoldingView
). Instead, the edge is now removed from the view. - Fixed a bug which could cause an edge in a folding view to be created at different ports as those which were given as parameters. This could lead to unexpected connections during interactive edge creation in rare cases.
-
Fixed a bug that could lead to an exception when duplicating a port on the
GraphClipboard
if it is duplicated. - Fixed a bug which caused changing the ports on an edge whose source or target node is collapsed being reverted after subsequent collapsing and expanding.
-
Label changes on folder nodes are no longer reverted by
FolderNodeConverter
if labels are copied between master and view node.
See the related incompatible changes.
View-Layout-Bridge
New Features and Improvements
-
LayoutExecutor
can 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, andCompositePortLocationModelPortSide
of this candidate can be specified when adding the parameter to the model. -
The new
LayoutExecutorAsync.createWebWorkerMessageHandler
andLayoutExecutorAsyncWorker.initializeWebWorker
methods simplify the default setup for layouts running in a web worker. -
The
LayoutExecutor.tableLayoutConfigurator
feature now uses more flexible placements for nodes that don't belong to any table node.
Bug Fixes
-
Exceptions thrown by
IGraph.applyLayout
are now properly re-thrown (instead of causing an unhandled promise rejection) and can be caught by a catch block.
See the related incompatible changes.
Layout
New Features and Improvements
-
LayoutPortCandidate
s now have amatchingId
. When finding matchingLayoutPortCandidate
s at nodes and for edges, twoLayoutPortCandidate
s can only match if theirMatchingIds
are equal. -
The
LayoutAnchoringStage
class (previously calledFixNodeLayoutStage
) now allows using not only nodes but also edges and labels to anchor the graph's position.-
The new
nodeAnchoringPolicies
,edgeAnchoringPolicies
,nodeLabelAnchoringPolicies
andedgeLabelAnchoringPolicies
properties specify which part of the items should be used to calculate the anchor point. -
The new
LayoutExecutor.anchoredItems
property specifies the graph items used to anchor the graph's position.
-
The new
-
The
ComponentLayout
has now the ability to specify which layout to apply to individual components usingComponentLayoutData.componentLayouts
property. 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
PartionGrid
). This is made possible by the newLayoutGridCellDescriptor.layoutGrid
property. This way it is no more required to set the global layout grid with theLayoutGridData.grid
property. If a node is to be placed in a grid but not in a specific cell, this can now be achieved using the newLayoutGrid.createDynamicCellDescriptor
method. Be aware that many layout algorithms likeHierarchicalLayout
don't support multiple layout grids. -
The
LayoutData
classes are now generic and can be used for items of aLayoutGraph
, too. Of course, it's still possible to useLayoutData
withIGraph
items.-
Instances of
LayoutData
classes 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.
-
Instances of
-
The API around the
LayoutGraph
class has received a major rework. TheLayoutGraph
is the only remaining graph implementation for the layout analysis part. ClassesGraph
(previously used for graph analysis, only) andCopiedLayoutGraph
have been removed and functionality was moved toLayoutGraph
.-
The API has been made more similar to the API of the
IGraph
with respect to creation, modification and access to nodes, edges and labels. -
Low-level data types like
NodeList
andEdgeList
have been removed as well as cursor for iteration over the elements. -
Properties
nodeCount
andedgeCount
have been removed. Query the size of thenodes
andedges
properties 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.layout
property. -
The edge path information is no defined by properties on the edge, most importantly these are
sourcePortLocation
,targetPortLocation
andbends
. -
Labels of nodes and edges are now accessed via a property on the respective owning item. To add labels, use
LayoutGraph.addLabel
method. The complicatedILabelLayoutFactory
that 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
LayoutGraphHider
class. -
LayoutGraph.containsEdge
has been removed in favor ofLayoutGraph.getEdgesBetween
. The same holds forNode.getEdgeTo
andNode.getEdgeFrom
methods. -
Convenience properties like
Node.neighbors
have been removed. Instead, query all edges (using the Edges property) and filter the required adjacent nodes manually. -
To copy a
LayoutGraph
instance, the newLayoutGraph.createCopy
method has been added. -
If a
LayoutGraph
without coordinate/path information is needed (to optimize memory performance), it can be created using the factoryLayoutGraph.createStructureGraph
method.
-
The API has been made more similar to the API of the
-
The new
LayoutGraph.getEdgesBetween
method returns all edges between two nodes. -
The
PortPlacementStage
now 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
PortPlacementStage
now correctly considers port candidates together with port groups.
See the related incompatible changes.
Hierarchical Layout
New Features and Improvements
-
The
HierarchicalLayout
class now supports defining minimum distances between the ports. They can be specified per node side using theHierarchicalLayoutNodeDescriptor.minimumPortDistance
property. The node size is increased if necessary in order to accommodate the minimum distances. -
The Hierarchical Layout class now supports aligning the ports of edges incident to the same node, that is, the ports
are placed at the same x- or y-coordinate. This can be particularly useful to visualize paths in a graph. Which
ports to align is specified by the new properties
PortData.sourcePortAlignmentIds
andPortData.targetPortAlignmentIds
accessible viaHierarchicalLayoutData.ports
. -
The
HierarchicalLayout
now produces fewer bends for multi-edges with labels when integrated edge labeling is enabled. -
The
HierarchicalLayout
class now produces better results for graphs with tabular groups where all children have a fixed user-specified order. - The routes of self-loops now consider both node and edge labels preventing overlaps if possible.
- The ports of edges with free ports are no longer placed at the same location as fixed ports, which previously could happen if multiple edges had the same fixed port.
-
The
HierarchicalLayout
no longer produces overlapping edge segments if there are grouped edges with different thicknesses values. Previously, the user had to ensure that all these edges use the same thickness. -
In barycenter mode the
HierarchicalLayout
now enforces a more symmetric placement of the nodes that are part of chains or height-2 trees.
New Demos
-
There is a new demo showing how to implement
sourcePortAlignment
andtargetPortAlignment
in hierarchical layout. -
There is a new demo showing how to use the
HierarchicalLayoutData.incrementalNodes
property to incrementally lay out the newly loaded nodes in a nested graph.
Bug Fixes
-
The
HierarchicalLayout
now properly handles self-loop edges when the edge is at a group node and furthermore edge/port grouped with the same ID on both sides. Previously, it was not routed correctly or that it was removed from theLayoutGraph
instance when running the layout algorithm directly on the graph instance without using a copy. -
The
HierarchicalLayout
class no longer swaps the position of fixed nodes in incremental layout mode with user-specified sequence constraints. -
The
HierarchicalLayout
class no longer produces superfluous crossings for some graphs with group nodes in incremental layout mode. - Edges between two subcomponents now correctly consider fixed any-side port candidates.
-
The
HierarchicalLayout
class no longer produces very long edge segments for some input graphs containing groups with node halos and polyline edge routing. -
The
HierarchicalLayout
class no longer throws an exception for graphs with bus structures if the algorithm runs in incremental mode and the group transposition feature is enabled. -
The
HierarchicalLayout
class no longer produces intertwined edge routes with many superfluous crossings and bends for some cases with sequence constraintsPlaceAtHead
orPlaceAtTail
. The problem mainly occurred with graphs with groups orPartitionGrid
and incompatible sequence constraints.
See the related incompatible changes.
Tree Layout
New Features and Improvements
-
Added the new
TreeLayout.fromSketchMode
property to consider the initial coordinates of the graph elements. This has an effect only if the used subtree placers implementIFromSketchSubtreePlacer
. -
Added the
TreeLayoutData.multiParentDescriptors
property that allows to specify style information for multi-parent structures. -
The
TreeReductionStageData
class now offersnonTreeEdgesResult
property. It allows to conveniently query the set of edges that the stage actually selected as non-tree edges. -
The
TreeLayout
now considers minimum last segment lengths no matter on which side the port shall be placed. -
The
LeftRightSubtreePlacer
now supports minimum segment length, which can be set with the propertiesminimumFirstSegmentLength
andminimumLastSegmentLength
. -
All subtree placers that used
RootNodeAlignment
support placing the subtree root centered above the ports with the new valueCENTER_OF_PORTS
. -
The
SingleLayerSubtreePlacer
supports placing the subtree root centered with respect to the ports at its children with the new enum valueSingleLayerSubtreePlacerRootAlignment.CENTER_OF_PORTS
. -
The
AspectRatioSubtreePlacer
now supports minimum first and last segment lengths. -
The
AspectRatioSubtreePlacer
now supports multiple variants how to place the root node with respect to its children, which can be set using the propertieschildArrangement
androotPlacement
. -
Added properties of
TreeReductionStageData
directly to theLayoutData
of tree layouts, includingRadialLayoutData
,AspectRatioTreeLayoutData
,RadialTreeLayoutData
, andTreeLayoutData
.
Bug Fixes
-
The
AspectRatioSubtreePlacer
class no longer ignores the specifiedAspectRatioSubtreePlacer.childAlignmentPolicy
for some specific setups (e.g., if all children are leaves and have the same size).
See the related incompatible changes.
Orthogonal Layout
New Features and Improvements
-
The newly added
OrthogonalLayout.qualityTimeRatio
property allows controlling the layout quality by automatically enabling/disabling additional optimization steps. -
The
OrthogonalLayout
algorithm 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.edgeOrientation
property.
See the related incompatible changes.
Edge Router
New Features and Improvements
- The quality of edge routing for buses is improved.
-
If
EdgeRouter
is run with the buses feature and a limited duration, it now splits the available time amongst buses, meaning that it will not get "stuck" on a single bus, which could otherwise impact the quality of the remaining buses and non-bus edge routings.
Bug Fixes
-
The
EdgeRouter
class no longer produces uncovered buses. Previously, there were some rare cases where the specified bus edges didn't constitute a bus. - When routing edges to and from fixed ports in the interior of group nodes, other nodes in the group are not ignored anymore, so that the edge does not overlap them if possible.
See the related incompatible changes.
Organic Layout
New Features and Improvements
-
The performance for the
OrganicLayout
has been substantially improved for large graphs without group nodes. The improvement is triggered if no special constraints are defined and no shape recognition is enabled. -
The
OrganicLayout
now supports different styles for group substructures, which are set via theGroupSubstructureStyle
property.
Bug Fixes
- Fixed an issue that may have automatically disabled the component layout when using constraint-based features.
See the related incompatible changes.
Interactive Organic Layout
Demo Improvements
-
The Interactive Organic Layout demo now shows how to run the
InteractiveOrganicLayout
in a web worker thread.
See the related incompatible changes.
Radial Tree Layout
New Features and Improvements
-
Added data key
OUT_EDGE_COMPARATOR_DATA_KEY
toRadialTreeLayout
class (formerlyBalloonLayout
).
See the related incompatible changes.
Partial Layout
New Features and Improvements
-
PartialLayout
now supports specifying inversely directed edges in addition to undirected and directed edges.
See the related incompatible changes.
Component Layout
New Features and Improvements
-
ComponentLayout
now supportsnodeMargins
(formerlynodeHalos
) for eachComponentArrangementStyle
other thanNONE
andKEEP_CENTERS
.
See the related incompatible changes.
Algorithms
New Features and Improvements
-
The
LongestPath
algorithm now uses double values instead of integers for edge traversal costs. This improves thePaths
,LayoutGraphAlgorithms
, andLongestPath
classes. -
The
LayoutGraphAlgorithms.findCycleEdges
method 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.
See the related incompatible changes.
Analysis
New Features and Improvements
-
The
KShortestPaths
class has a new implementation of the k-shortest path algorithm that allows for the exclusion of non-simple paths (i.e., paths with repeating vertices). Previously, these paths could not be excluded. The new implementation is used by default and can be disabled with thesimplePaths
parameter. -
For usage with a
LayoutGraph
, the algorithm is also available via theLayoutGraphAlgorithms.kShortestPaths
method.
See the related incompatible changes.
Collections
New Features and Improvements
-
The
IEnumerable.ofType
method now supports primitive types as element types. -
The
IEnumerable.filter
method now has two new overloads with type guards.
See the related incompatible changes.
Geometry
New Features and Improvements
-
The new
GeneralPath.areaOrPathContains
method tests if the path fuzzily contains a point and can be used for hit-testing aGeneralPath
. -
All methods on the
GeneralPath
class now consistently acceptIPoint
instead ofPoint
andIRectangle
instead ofRect
. -
There are now methods on
Rect
andPoint
to calculate the distance between points and rectangles. -
The
GeneralPath.getProjection
method is now faster for paths with Bezier segments. -
The
IRectangle
interface no longer 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 itstopLeft
method. Similarly,IMutableRectangle
no longer implementsIMutablePoint
.
See the related incompatible changes.
Incompatible Changes
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
Default
prefix from the names of the following types:DefaultEdgePathCropper
,DefaultFoldingEdgeConverter
,DefaultFolderNodeConverter
,DefaultLabelStyle
,ObservableCollection
,DefaultPortCandidate
, andDefaultSelectionModel
. -
Removed
DefaultLabelModelParameterFinder
. -
Removed
DefaultBendCreator
. -
Removed the
Default
prefix from the names of the following types:Graph
,WebGL2DefaultLabelStyle
. -
Consistently use names
Padding
andMargins
in member names:-
Renamed the
TextEditorInputMode.textBoxPadding
property totextBoxMargins
. -
Renamed the
IndicatorLabelStyleDecorator.padding
property tomargins
. -
Renamed the
IndicatorNodeStyleDecorator.padding
property tomargins
. -
Renamed the
GraphEditorInputMode.contentRectMargins
property tocontentMargins
. -
Renamed the
OverviewInputMode.margins
property tocontentMargins
. -
Renamed the
ViewportAnimation.targetBounds
property totarget
. -
Renamed the
ViewportAnimation.targetViewMargins
property totargetMargins
. -
Renamed the
StripeControl.Insets
property tothickness
. -
Renamed the
StripeLabelModel.useActualInsets
property touseTotalPadding
. -
Renamed the
StretchStripeLabelModel.useActualInsets
property touseTotalPadding
. -
Renamed the
IStripe.actualInsets
method tototalPadding
. -
Renamed the
GroupNodeStyle.contentAreaInsets
property tocontentAreaPadding
. -
Renamed
Insets
properties of allILabelModel
implementations tomargins
. -
Replace name part
Insets
of other types and members withPadding
.
-
Renamed the
-
Removed the
BridgeManager.clipMargin
property. -
Enum values that followed the
NORTH
,EAST
,SOUTH
,WEST
naming convention have been renamed to follow aTop
,Right
,Bottom
,Left
naming convention. In particular, the values of the following enums have been renamed:HandlePositions
,EdgeSegmentDirection
,ExteriorLabelModelPosition
,InteriorLabelModelPosition
,InteriorStretchLabelModelPosition
,StretchStripeLabelModelPosition
, andStripeLabelModelPosition
,. -
Renamed the
CompositePortLocationModelPortSide
enum 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
Enum
static helper methods have been removed. Instead, each yFiles enum has a new
method 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
Comparison
orComparer
toComparator
. -
The static
isInstance
method of each type was removed. Useinstanceof
instead. 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
Class
now use the<T>
T
type directly instead. This usually means that instead of
, you can now useSomeClass
.$classSomeClass
instead. -
Renamed the
CreateEdgeInputMode.allowSelfloops
property toallowSelfLoops
. -
Renamed the
GraphEditorInputMode.selectNodeAndSelfloopBends
method toselectNodeAndSelfLoopBends
. -
Renamed the
GraphEditorInputMode.autoSelectSelfloopBends
property toautoSelectSelfLoopBends
. -
Renamed the
IEdge.isSelfloop
method toIEdge.isSelfLoop
.
See the related new features.
Graph
Incompatible API Changes
-
The
SegmentRatioPortLocationModel
class is now namedEdgeSegmentPortLocationModel
, similar toEdgeSegmentLabelModel
. -
The
createFromSource
andcreateFromTarget
methods of theSegmentRatioPortLocationModel
andBendAnchoredPortLocationModelParameter
are now namedcreateParameterFromSource
andcreateParameterFromTarget
. -
Removed the
TableAnimation
class. Use the factoryIAnimation.createTableAnimation
method as a replacement. -
GenericPortLocationModel
has been renamed toCompositePortLocationModel
and doesn't implementIEnumerable
<
anymore. Instead, theILabelModelParameter
>parameters
property can be used to iterate the parameter. -
The
FreeEdgeLabelModel.createEdgeAnchored
method has been renamed toCreateParameter
. -
The
FreeNodeLabelModel.createDefaultParameter
method has been removed and replaced by the newFreeNodeLabelModel.CENTER
field. -
The
FreeNodeLabelModel.createCanonicalParameter
method has been renamed toCreateParameter
. -
The
FreePortLabelModel.createDefaultParameter
method has been removed and replaced by the newFreePortLabelModel.CENTER
field. -
The label models
ExteriorLabelModel
,InteriorLabelModel
, andInteriorStretchLabelModel
have been renamed toExteriorNodeLabelModel
,InteriorNodeLabelModel
, andStretchNodeLabelModel
, respectively,. -
The
GenericLabelModel
class has been removed. Its functionality has been integrated into theCompositeLabelModel
, which can be used instead. -
The
CompositeLabelModel.labelModels
property has been removed. Instead of adding label models to this list, the newaddModel
method has to be called. -
The static
deserializeParameter
andserializeParameter
methods of theILabelModelParameter
andIPortLocationModelParameter
classes 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
ILabelModel
parameter of theILabelModelParameterFinder.findBestParameter
andILabelModelParameterProvider.getParameters
methods has been removed. -
The classes
DelegateUndoUnit
andCompositeUndoUnits
have been removed. The new factory methodsIUndoUnit.fromHandler
andIUndoUnit.combine
can be used instead. -
The
UndoUnitBase
class has been removed. Subclasses now have to implement theIUndoUnit
interface instead. -
The
owner
parameter forITable.createRow
,CreateColumn
, andsetParent
has been renamed toparent
. -
Changes to the
GraphCopier
class:-
The methods
copyNodeStyle
,copyEdgeStyle
,copyPortStyle
,copyLabelStyle
,getOrCreateCopy
,copyLabelLayoutParameter
, andcopyPortLocationParameter
have been made protected. -
The methods
copyChildNode
,copyGroupNode
, andcopyEdge
have been renamed toCreateNode
,createGroupNode
, andcreateEdge
to clarify their role. -
The
clone
property has been renamed toCloneTypes
. -
The
Copy
method now uses anIEnumerable
of items instead of a filter predicate to define the subset to copy.
-
The methods
-
The
ILabelModel.createDefaultParameter
method has been removed. Instead suitable other Create*Parameter methods of the concrete label model implementations should be used. -
The
IPortLocationModelParameter.supports
method has been removed. Instead, theIPortLocationModel.getLocation
method 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 withhasOwner
orhasSourceAndTargetPort
first before accessing these properties. -
IEdge
'ssourceNode
andtargetNode
methods 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.supports
method has been removed. Instead, theILabelModel.getGeometry
method may now throw an exception if the label and label model parameter don't match. -
The
GraphItemTypes.enumerableNotContainsTypes
method was removed, use theincludes
method instead. -
Method
GroupingSupport.getPathToRoot
has been renamed togetAncestors
and returns anIListEnumerable
instead of anIList
. -
The static parameter fields of
FreeNodePortLocationModel
have been renamed analogue to the static parameter fields inInteriorNodeLabelModel
. -
The
GraphClipboard.isDummy
method has been renamed toisHelper
. -
The
UndoEngine.token
property replaces theUndoEngine.getToken
method. -
The
IMapperRegistry
interface, theMapperRegistry
class, and theIGraph.mapperRegistry
property 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, useLayoutData
instead.
Incompatible Behavior Changes
-
The rotation direction of
OrientedRectangle
,LayoutNodeLabel
,LayoutEdgeLabel
andFreeEdgeLabelModel
is now clockwise to be consistent with the other models. -
The
EdgeSegmentPortLocationModel.createParameterFromTarget
method 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
EdgeSegmentLabelModel
using itscreateParameterFromCenter
method instead ofcreateParameterFromSource
. -
The default value for the
padding
properties ofExteriorNodeLabelModel
,InteriorNodeLabelModel
,StretchNodeLabelModel
, andStretchStripeLabelModel
have 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
distance
properties of theEdgePathLabelModel
andEdgeSegmentLabelModel
when 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 anedgeSide
other thanON_EDGE
is used. -
The default lookup for
INode
doesn't return anIMutableRectangle
anymore, the default lookup forIBend
doesn't return anIMutablePoint
anymore, and the default lookup forILabel
doesn't return anIMutableSize
anymore. -
SegmentRatioPortLocationModel
now uses the path geometry from the edge's style instead of bend locations to determine segments.
See the related new features.
Components
Incompatible API Changes
-
Renamed the coordinate transformation methods to also include the source coordinate system in their names:
-
Renamed
CanvasComponent.toViewCoordinates
toworldToViewCoordinates
. -
Renamed
CanvasComponent.toWorldCoordinates
toviewToWorldCoordinates
. -
Renamed
IRenderContext.toViewCoordinates
toworldToViewCoordinates
.
-
Renamed
-
The default
inputMode
inGraphComponent
is no longernull
but is now set toGraphViewerInputMode
. -
Renamed
HighlightIndicatorManager.selectionModel
toitems
. -
Renamed
SelectionIndicatorManager.selectionModel
toitems
. -
Renamed
SelectionIndicatorManager.model
todomain
. -
Renamed commands
MOVE_FOCUS_BACK
andMOVE_FOCUS_FORWARD
toMOVE_FOCUS_LEFT
andMOVE_FOCUS_RIGHT
. -
Removed the
animateScrollCommands
property andCanvasControl.AnimateScrollCommandsProperty
field. ChangeanimatedViewportChanges
property instead. -
Renamed the
CanvasComponent.autoDrag
property toAutoScrollOnBounds
. -
Renamed the
CanvasComponent.autoDragInsets
property toautoScrollPadding
. -
Renamed the
ViewportChanges.AUTO_DRAG
field toAutoScrollOnBounds
. -
Removed properties
dragSize
,dragTime
anddoubleClickSize
ofCanvasComponent
class. -
The predefined
EventRecognizer
constants of theMouseEventRecognizers
,KeyEventRecognizers
, andTouchEventRecognizers
classes have been moved to theEventRecognizers
class. In addition, some rarely used constants have been removed. -
The events on
CanvasComponent
which are related to input devices and the correspondingEventRecognizer
constants have neem renamed to conform to platform conventions. -
The new
CanvasComponent.renderTree
property now encapsulates all low-level render object related API which was previously available directly onCanvasComponent
. -
The superfluous
CanvasComponent.setContentRect
method has been removed in favor of the setter of thecontentBounds
property. -
The
CanvasComponent
andcontentGroup
parameters have been removed from the constructor ofGraphModelManager
. Also, thecontentGroup
property can no longer be set directly. Instead, theinstall
method now sets bothCanvasComponent
andcontentGroup
. -
Renamed
Canvas
properties and method parameters toCanvasComponent
. -
ViewportLimiter.limitViewport
now uses a signature that works with the new typeViewportDescriptor
and respects the newViewportLimitingMode
enum. -
ViewportLimiter.honorBothDimensions
is now calledViewportLimiter.strictBoundsContainment
and the default value changed to false. -
The
ICanvasObject.group
property 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
up
event instead of adown
event or vice versa. -
The
CanvasComponent.resources
property 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:toPageFromView
is nowviewToPageCoordinates
,toViewFromPage
ispageToViewCoordinates
, andtoWorldFromPage
ispageToWorldCoordinates
. -
The DOM focus state of the
CanvasComponent
moved from the container element to an inner child of theCanvasComponent
. Therefore, 'blur' listeners onCanvasControl.div
(nowCanvasComponent.htmlElement
) do not trigger anymore. Instead, use thefocusout
event onCanvasComponent.htmlElement
. -
The
Color.fromArgb
method has been removed. Use theColor
constructor or theColor.fromRGBA
method instead. -
The events
GraphComponent.graph-changed
,CanvasComponent.content-margins-changed
,CanvasComponent.input-mode-changed
, andCanvasComponent.input-mode-context-changed
have been removed. -
The order of the arguments of the methods
CanvasComponent.zoomTo
andCanvasComponent.zoomToAnimated
has changed. -
The
HTMLCanvasVisual.paint
method has been renamed torender
. -
SizeChangedDetectionMode
has been removed: TheGraphComponent
size is now always detected using a Resize Observer. -
The
Theme
class has been removed in favor of CSS variables. TheCLASSIC
theme is no longer available. -
The
CanvasComponent.schedule
method has been removed as it had no use. -
The
RenderModes
enum is now calledRenderMode
, since this is not a flags enum. Also, its valuesWEB_GL
andWEB_GL2
have been renamed to the nicer names WebGL and WebGL2. -
Renamed
CanvasComponent.div
toCanvasComponent.htmlElement
to reflect the less strict requirement for its hosting element. -
Renamed the values of the
ScrollBarVisibility
enum to be more clear:-
ScrollBarVisibility.NEVER
is nowScrollBarVisibility.HIDDEN
. -
ScrollBarVisibility.AS_NEEDED_DYNAMIC
is nowScrollBarVisibility.AUTO
. -
ScrollBarVisibility.ALWAYS
is nowScrollBarVisibility.VISIBLE
.
-
Incompatible Behavior Changes
-
For new
GraphModelManager
instances, theinstall
method has to be called either directly or indirectly by assigning theGraphModelManager
to theGraphComponent.graphModelManager
property.
See the related new features.
Rendering
Incompatible API Changes
-
The
VOID_VISUAL_CREATOR
class was removed. Use theIObjectRenderer.VOID_OBJECT_RENDERER
singleton instead. -
The
ICanvasObjectDescriptor
interface has been renamed toIObjectRenderer
and itsisDirty
method has been removed. -
The
ICanvasObject
interface has been renamed toIRenderTreeElement
and itsuserObject
property has been renamed totag
. Itsdescriptor
property has been replaced with propertyrenderer
of typeIObjectRenderer
. -
The
ICanvasObjectGroup
interface has been renamed toIRenderTreeGroup
. -
The
ICanvasObjectDescriptor
class has been renamed toIObjectRenderer
. -
The
ICanvasObjectInstaller
interface has been removed. -
The
IFocusIndicatorInstaller
,IHighlightIndicatorInstaller
, andISelectionIndicatorInstaller
interfaces have been renamed toIFocusRenderer
,IHighlightRenderer
, andISelectionRenderer
respectively and now inherit fromIObjectRenderer
instead ofICanvasObjectInstaller
. Classes implementing these interfaces have been changed accordingly (EdgeStyleDecorationInstaller
,LabelStyleDecorationInstaller
,NodeStyleDecorationInstaller
, andPortStyleDecorationInstaller
have been renamed toEdgeStyleIndicatorRenderer
,LabelStyleIndicatorRenderer
,NodeStyleIndicatorRenderer
, andPortStyleIndicatorRenderer
respectively). -
The
getInstaller
methods on theModelManager
,FocusIndicatorManager
,HighlightIndicatorManager
,SelectionIndicatorManager
,GraphFocusIndicatorManager
,GraphHighlightIndicatorManager
, andGraphSelectionIndicatorManager
classes are now calledgetRenderer
and returnIObjectRenderer
. Similarly, theGetCanvasObjectGroup
methods of these classes have been renamed toGetRenderTreeGroup
. -
The members of class
GraphModelManager
have been adjusted to reflect theICanvasObjectDescriptor
andICanvasObject
renamings. More precisely,defaultEdgeDescriptor
,DEFAULT_LABEL_DESCRIPTOR
,defaultNodeDescriptor
,DEFAULT_PORT_DESCRIPTOR
,edgeDescriptor
,edgeLabelDescriptor
,nodeDescriptor
,nodeLabelDescriptor
,portDescriptor
,portLabelDescriptor
,provideUserObjectOnMainCanvasObject
,getCanvasObject
,GetCanvasObjectGroup
,GetCanvasObjectGroup
,GetCanvasObjectGroup
,GetCanvasObjectGroup
, andgetMainCanvasObject
have 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
, andgetMainRenderTreeElement
respectively. -
The members of class
ItemModelManager
have been adjusted to reflect theICanvasObjectDescriptor
andICanvasObject
renamings. More precisely,canvasObjectGroup
,descriptor
,getCanvasObject
,GetCanvasObjectGroup
, andgetDescriptor
have been renamed torenderTreeGroup
,renderer
,getRenderTreeElement
,GetRenderTreeGroup
, andgetRenderer
respectively. -
The
RectangleIndicatorInstaller
,OrientedRectangleIndicatorInstaller
, andPointSelectionIndicatorInstaller
classes have been removed. -
The
IStripeInputVisualizationHelper
interface is now calledIStripeInputRenderer
and extendsIObjectRenderer
, theDefaultStripeInputVisualizationHelper
class has been removed. -
The
StripeDecorator.inputVisualizationDecorator
property has been renamed toinputRenderer
. -
The
DefaultPortCandidateDescriptor
class 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_KEY
static properties. -
The new
PortCandidateRenderer
property on theCreateEdgeInputMode
class replaces thecandidateDescriptor
andclosestCandidateDescriptor
properties. -
The new public property
PortCandidateRenderer
on thePortRelocationHandle
class replaces thecreatePortCandidateDescriptor
andcreateCurrentPortCandidateDescriptor
protected methods. -
The new public property
PortCandidateRenderer
on thePortRelocationHandleProvider
allows customizing the renderer for the port candidates. -
The new
viewportRectangleRenderer
property on theOverviewInputMode
class allows customizing the renderer for the viewport rectangle. It replaces thetemplate
property and theVIEWPORT_TEMPLATE_KEY
static property. -
The new
marqueeRenderer
property on theMarqueeSelectionInputMode
class replaces thetemplate
property andMARQUEE_RECTANGLE_TEMPLATE_KEY
static property. -
The new
finishRegionRenderer
property on theLassoSelectionInputMode
class replaces thefinishRegionTemplate
andfinishRegionHighlightTemplate
properties and theFINISH_REGION_TEMPLATE_KEY
andFINISH_REGION_HIGHLIGHT_TEMPLATE_KEY
static properties. -
The
LASSO_STROKE_KEY
andLASSO_FILL_KEY
static properties onLassoSelectionInputMode
were removed. -
The new
candidateRenderer
property on theLabelPositionHandler
class replaces thecandidateTemplate
andhighlightTemplate
properties and theCANDIDATE_TEMPLATE_KEY
andHIGHLIGHT_TEMPLATE_KEY
static properties. -
The
getCanvasObject
andgetCanvasObjects
methods of classCanvasComponent
have been renamed togetRenderTreeElement
and have been moved to theGraphModelManager
class. -
The
createSnapResultCanvasObjectDescriptor
method of classSnapContext
has been renamed tocreateSnapResultRenderer
. -
The
graphVisualCreator
property of classGraphOverviewComponent
is now calledGraphOverviewRenderer
and of typeIObjectRenderer
. -
The classes
GraphOverviewSvgVisualCreator
,GraphOverviewCanvasVisualCreator
,GraphOverviewWebGLVisualCreator
, andWebGL2GraphOverviewVisualCreator
were replaced by theGraphOverviewRenderer
class, 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.
See the related new features.
Selection, Focus, Highlight
Incompatible API Changes
-
Class
FocusIndicatorManager
no longer implementsINotifyPropertyChanged
. -
Replaced event
FocusIndicatorManager.property-changed
with eventfocused-item-changed
. -
Renamed Method
FocusIndicatorManager.onPropertyChanged
toonFocusedItemChanged
and changed signature. -
The
IndicatorEdgeStyleDecorator
,IndicatorLabelStyleDecorator
,IndicatorNodeStyleDecorator
, andIndicatorPortStyleDecorator
classes were removed. Use theEdgeStyleIndicatorRenderer
etc. classes instead. -
The
GraphFocusIndicatorManager
,GraphHighlightIndicatorManager
, andGraphSelectionIndicatorManager
classes were removed. Use theFocusIndicatorManager
etc. classes and their default instances on theGraphComponent
class instead and register instances of theEdgeStyleIndicatorRenderer
etc. classes to the item lookups via the graph decorator. -
The
addSelection
andremoveSelection
methods on theSelectionIndicatorManager
class were removed. Instead, modify theitems
property directly. -
FocusIndicatorManager.showFocusPolicy
changed its default to the newWHEN_USING_KEYBOARD
. The old policy calledONLY_WHEN_FOCUSED
is now calledWHEN_FOCUSED
. -
HighlightIndicatorManager
now by default uses the newGraphComponent.highlights
collection. Adding, removing, and clearing highlights should now be done via theGraphComponent.highlights
property. -
The
ISelectionModel
interface 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
ItemSelectionChangedEventArgs
have been replaced by usages ofItemEventArgs
and there are now two separate events for adding/selecting and removing/deselecting elements from the collections. TheItemSelectionChangedEventArgs
type has been removed. -
The default implementations of
IGraphSelection
andIStripeSelection
have been removed from the public API.
See the related new features.
Styles
Incompatible API Changes
-
Class
TableNodeStyle
no longer implementsINotifyPropertyChanged
. -
The class
Arrow
is 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
Wrapped
property ofCollapsibleNodeStyleDecorator
,IndicatorNodeStyleDecorator
,IndicatorEdgeStyleDecorator
,IndicatorLabelStyleDecorator
,IndicatorPortStyleDecorator
,ShadowNodeStyleDecorator
, andIconLabelStyle
has 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
DelegatingNodeStyle
andCompositeNodeStyle
style 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.copyBackgroundStyle
method has been removed. Theclone
method 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
,PanelNodeStyle
andShinyPlateNodeStyle
have been removed. -
Renamed some values of
TextWrappingShape
andShapeNodeShape
:-
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
ArrowNodeStyle
for more flexible visualizations of these geometries.
-
Use the
-
Renamed
STAR5_UP
to Star5, removed old (down pointing) Star5.-
Use the factory methods on
GeneralPathNodeStyle
for 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
IArrow
interface now requires thecropAtPort
property to be provided by implementations. For backward compatibility return false in simple subclasses. -
Removed
TemplateNodeStyle
,StringTemplateNodeStyle
,TemplateLabelStyle
,StringTemplateLabelStyle
,TemplatePortStyle
,StringTemplatePortStyle
,TemplateStripeStyle
andStringTemplateStripeStyle
. Alternatively, useLitNodeStyle
from the yFiles demos, or implement a custom style. -
The
SolidColorFill
class has been removed because the Color class takes over its functions. -
The
MarkupLabelStyle
no longer inherits fromDefaultLabelStyle
. -
WebGLImageNodeStyle
: renamed background visual properties: shape →backgroundShape
, fill →backgroundFill
, stroke →backgroundStroke
. -
Renamed
textDecoration
toTextDecorations
to reflect its enum flags characteristic. -
Removed
TextDecoration.BLINK
enum value. -
Renamed
WebGL2IconNodeStyle
toWebGLImageNodeStyle
.-
Renamed its
icon
property toimage
. -
Renamed its
iconColor
property toimageColor
.
-
Renamed its
-
The
VoidNodeStyle
,VoidEdgeStyle
,VoidLabelStyle
,VoidPortStyle
,VoidStripeStyle
classes, 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
VoidShapeGeometry
andVoidPathGeometry
classes were removed. Use one of the following constant singletons instead:IShapeGeometry.VOID_SHAPE_GEOMETRY
andIPathGeometry.VOID_PATH_GEOMETRY
. -
The
ImageNodeStyle.image
property has been renamed to `href`. -
The
ImageNodeStyle.fallbackImage
property has been removed. -
The
ImageNodeStyleRenderer.TEMPLATE_KEY
has been removed. -
Removed
fontWeight
enum in favor of setting the font's weight as string. -
The values of the
TextWrapping
enum have been renamed to distinguish those that wrap the lines from those that don't. -
The
DefaultLabelStyle.clipText
andMarkupLabelStyle.clipText
properties have been removed. In case a label text should be clipped but not wrapped, use theTextWrapping.CLIP
policy. - 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.wrapping
andMarkupLabelStyle.wrapping
properties has been changed toTextWrapping.WRAP_WORD_ELLIPSIS
.
See the related new features.
WebGL
Incompatible API Changes
-
The type of the
WebGLLabelStyle.padding
andWebGLIconLabelStyle.padding
properties is nowInsets
instead of a singlenumber
. -
Made
WebGLTextureRendering
a non-flag enum. -
The
WebGL2ShapeNodeShape.HEXAGON2
property is now calledHEXAGON_STANDING
. -
Style setters on the
WebGL2GraphModelManager
have 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_GL
enum value and theWebGLShapeNodeStyle
,WebGLImageNodeStyle
,WebGLPolylineEdgeStyle
,WebGLTaperedEdgeStyle
, andGraphOverviewWebGLVisualCreator
classes have been removed. -
The
textAlignment
property inWebGLLabelStyle
was renamed tohorizontalTextAlignment
. -
Class
WebGLAnimation
no longer implementsIAnimation
but is still accepted inIAnimation.createParallelAnimation
andIAnimation.createSequentialAnimation
through auto-conversion.
See the related new features.
Interaction
Incompatible API Changes
-
Removed the
PortRelocationHandle.createDummyEdgeVisualCreator
method. To change the preview edge's style overwritePortRelocationHandle.createPreviewEdge
instead. -
The
LabelPositionHandler.setPosition
method has been removed. -
The
LabelPositionHandler.useFinder
property has been removed. Use the newuseParameterFinderRecognizer
property instead. -
The
LabelPositionHandler.useParameterFinder
method has been renamed toshouldUseParameterFinder
. -
The
LabelPositionHandler.useFinder
property has been removed. -
The protected virtual
createEdgeCreationInputModeContext
method on theCreateEdgeInputMode
class has been removed. Use or override thecreateInputModeContext
method, instead. -
The
ToolTipQueryEventArgs
class is now namedQueryToolTipEventArgs
to properly match the corresponding event's name. -
Renamed
DoubleClickPolicy
toClickReportingPolicy
. -
Renamed
ClickInputMode.doubleClickPolicy
toClickReportingPolicy
. -
Renamed
DoubleClickPolicy.INITIAL_SINGLE_AND_DOUBLE_CLICK
toClickReportingPolicy.INSTANT
. -
Renamed
DoubleClickPolicy.DOUBLE_CLICK_ONLY
toWAIT_FOR_DOUBLE_CLICK
. -
Removed
DoubleClickPolicy.BOTH_SINGLE_CLICKS_AND_DOUBLE_CLICK
. -
Changed the default of
ClickInputMode.clickReportingPolicy
toClickReportingPolicy.INSTANT
. -
Removed the
preventNextDoubleClick
method fromClickInputMode
class. Use theCancel
method instead. -
The
LassoSelectionEventArgs.selectionPath
property has been renamed to Path. -
The core
onMarqueeSelect
andonLassoSelect
methods ofGraphEditorInputMode
andGraphViewerInputMode
, that take an enumerable and predicate, have been removed while the otheronMarqueeSelect
andonLassoSelect
method got an additional parameter of typeSelectionPolicy
. -
Renamed
DropInputMode.mousePosition
topointerPosition
. -
Renamed
DropInputMode.captureMouseInputDuringDrag
tocapturePointerInputDuringDrag
. -
Renamed
ItemDropInputMode.snappedMousePosition
tosnappedPointerPosition
. -
The generic type of the
IHitTester
interface has been removed. Instead, a parameter of typeGraphItemTypes
has been added to itsenumerateHits
method. -
Renamed
LabelDropInputMode.useBestMatchingParameter
andPortDropInputMode.useBestMatchingParameter
touseLocationForParameter
. -
Events which involve item changes triggered by input modes are now of type
InputModeItemEventArgs
instead 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
. -
ItemDropInputMode
and 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
:InputModeItemChangedEventArgs
instead ofItemDeletedEventArgs
. -
GraphEditorInputMode.edge-ports-changed
:InputModeItemChangedEventArgs
instead ofEdgeEventArgs
. -
GraphEditorInputMode.node-reparented
:InputModeItemChangedEventArgs
instead ofNodeEventArgs
. -
EditLabelInputMode.label-deleted
:InputModeItemChangedEventArgs
instead ofLabelEventArgs
.
-
-
Renamed "Source" to "Start" and "Target" to "End" in the following members of
CreateEdgeInputMode
class:-
Renamed
resolveSourcePortCandidates
toresolveStartPortCandidates
. -
Renamed
resolveTargetPortCandidates
toresolveEndPortCandidates
. -
Renamed
source-port-candidate-changed
tostart-port-candidate-changed
. -
Renamed
target-port-candidate-changed
toend-port-candidate-changed
. -
Renamed
sourcePortCandidate
tostartPortCandidate
. -
Renamed
targetPortCandidate
toendPortCandidate
. -
Renamed
snapToTargetCandidate
tosnapToEndCandidate
. -
Renamed
cancelGestureOnInvalidTarget
tocancelGestureOnInvalidEnd
. -
Renamed
sourceNodeDraggingFinishedRecognizer
tostartPortOwnerDraggingFinishedRecognizer
. -
Renamed
sourceNodeDraggingCursor
tostartPortOwnerDraggingCursor
. -
Renamed
showSourcePortCandidatesHitTestable
toshowStartPortCandidatesHitTestable
. -
Renamed
onSourcePortCandidateChanged
toonStartPortCandidateChanged
. -
Renamed
onTargetPortCandidateChanged
toonEndPortCandidateChanged
. -
Renamed
source-port-candidate-changed
tostart-port-candidate-changed
. -
Renamed
target-port-candidate-changed
toend-port-candidate-changed
. -
Renamed
getSource
togetStartPortOwner
. -
Renamed
getTargetNode
togetEndPortOwner
. -
Renamed
lookupSourcePortCandidateProvider
togetStartPortCandidateProvider
. -
Renamed
lookupTargetPortCandidateProvider
togetEndPortCandidateProvider
. -
Renamed
GetSourcePortCandidates
togetStartPortCandidates
. -
Renamed
GetTargetPortCandidates
togetEndPortCandidates
. -
Renamed
GetSourcePortCandidate(PointD)
togetStartPortCandidate
. -
Renamed
getSourcePortCandidate
(IEnumerable
<
,IPortCandidate
>Point
, bool) toselectStartPortCandidate
. -
Renamed
getClosestCandidate
toselectClosestCandidate
. -
Renamed
getClosestSourceCandidate
toselectClosestStartCandidate
. -
Renamed
getClosestTargetCandidate
toselectClosestEndCandidate
. -
Renamed
sourcePortCandidateHitRadius
tostartPortCandidateHitRadius
. -
Renamed
updateTargetLocation
toupdateEndLocation
. -
Renamed
showTargetHighlight
toshowEndHighlight
. -
Renamed
updateTargetHighlight
toupdateEndHighlight
. -
Renamed
dummyTargetNode
topreviewEndNode
. -
Renamed
dummyTargetNodePort
topreviewEndNodePort
.
-
Renamed
-
Renamed
ShowPortCandidates.SOURCE
tostart
andShowPortCandidates.TARGET
toend
. -
Removed
CreateEdgeInputMode.createDummyEdgeGraph
,CreateEdgeInputMode.createDummyEdge
,CreateEdgeInputMode.createDummyTargetNode
,CreateEdgeInputMode.createDummyTargetNodePort
,CreateEdgeInputMode.dummySourceNodePort
,CreateEdgeInputMode.updateDummyEdgeSourcePort
, andCreateEdgeInputMode.updateDummyEdgeTargetPort
. -
The
InputModeContext
property has been removed from theIInputMode
interface. In input mode implementations, the property has been renamed toparentInputMode
and changed to protected access to prevent incorrect usage. -
ICanvasContext.DEFAULT
andICanvasContext.createCanvasContext
have been removed. A validICanvasContext
can be retrieved from theCanvasComponent.canvasContext
property. -
IInputModeContext.EMPTY
has been removed. A validIInputModeContext
can be retrieved usingCanvasComponent.inputModeContext
property. -
The factory methods for input mode contexts on the
IInputModeContext
interface have been removed. AppropriateIInputModeContext
implementations can be obtained usingInputModeContext
class withCanvasComponent.inputModeContext
as parent context. -
The static fields
ALL_NODE_CANDIDATES
andALL_NODE_AND_EDGE_CANDIDATES
onIEdgeReconnectionPortCandidateProvider
have been replaced by the factory methodsfromAllNodeCandidates
andfromAllNodeAndEdgeCandidates
. The implementations now provide a port candidate for the unchanged port of the edge when collecting the port candidates from theIPortCandidateProvider
instances of the nodes and edges. -
CreateEdgeInputMode
's methods have been renamed:-
getClosestSourceCandidate
toselectClosestStartCandidate
. -
getClosestCandidate
toselectClosestCandidate
. -
getClosestTargetCandidate
toselectClosestEndCandidate
.
-
-
CreateEdgeInputMode.startPortCandidateHitRadius
now is defined in view coordinates. -
The
HandleTypes
enums has been refactored to a non-flaggableHandleType
enum, and the values have been adjusted. -
A
tag
property has been added to theIHandle
interface. yFiles does not use the property and initializes it withnull
, but decorating handles forward any values unmodified. -
The
textProvider
parameter forToolTipInputMode
's constructor has been removed. An event handler for thequery-tool-tip
event can be registered instead. -
Removed callbacks which only raised the related events (e.g.
OnContentBoundsChanged
) from classesCanvasComponent
andGraphComponent
. Use the corresponding events (e.g.ContentBoundsChanged
) instead. -
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
toolTip
andTextBox
properties on classesToolTipInputMode
andTextEditorInputMode
, respectively. Set custom instances using the properties, instead. -
Removed the methods
GetBounds
,getVisual
,getVisualCreator
, andisHit
fromCanvasComponent
class. Use the respective methods ofRenderTree
class instead. -
The
MouseHoverInputMode
class has been renamed toToolTipInputMode
. -
The
GraphInputMode.mouseHoverInputMode
property has been renamed toToolTipInputMode
. -
The
handleIsHitTouch
andgetClosestHitHandleTouch
methods ofHandleInputMode
have been removed in favor of the methodshandleIsHit
andgetClosestHitHandle
, which now handle all types of pointer devices. -
NavigationInputMode
'sfindNearestItem
method now gets thestartItem
rather than the location of it and this item is also included in theitemsToCheck
parameter. Implementations may use the newgetReferenceLocation
to find the starting location and should make sure not to return thestartItem
itself. -
The protected
Should-
methods of the input modes have been removed and replaced by predicate properties. -
The event
GraphEditorInputMode.label-text-changed
has been changed tolabel-edited
to reflect the broader scope of changes allowed during label editing. Similarly,GraphEditorInputMode.onLabelTextChanged
is now namedonLabelEdited
. -
Most methods, properties, and events related to label editing have been moved from
GraphEditorInputMode
toEditLabelInputMode
:autoRemoveEmptyLabels
,hideLabelDuringEditing
,TextEditorInputMode
,textEditorInputModeConfigurator
,createLabel
,createLabelCore
,editLabelCore
,openTextEditor
,label-deleted
,label-text-editing-started
,label-text-editing-canceled
,ValidateLabelEditing
. The eventslabel-editing
andlabel-adding
have been moved toEditLabelInputMode
and renamed toquery-label-editing
andquery-label-adding
, respectively, to clarify their purpose. -
Most methods, properties, and events related to label editing have been moved from
TableEditorInputMode
toEditLabelInputMode
:autoRemoveEmptyLabels
,hideLabelDuringEditing
,TextEditorInputMode
,textEditorInputModeConfigurator
,createLabel
,createLabelCore
,editLabelCore
,openTextEditor
,label-deleted
,label-text-editing-started
,label-text-editing-canceled
,ValidateLabelEditing
. The eventslabel-editing
andlabel-adding
have been moved toEditLabelInputMode
and renamed toquery-label-editing
andquery-label-adding
, respectively, to clarify their purpose. -
Replaced
MouseEventArgs
andTouchEventArgs
withPointerEventArgs
. -
Integrated
TapInputMode
intoClickInputMode
. Touch input now also firesclicked
events. -
Removed all
ClickInputMode
events except forclicked
. Click buttons and click count can be obtained from theClickEventArgs
. -
Removed the events
item-tapped
,item-double-tapped
, andcanvas-tapped
fromGraphInputMode
in favor of checking thePointerType
on the corresponding Click event. -
Method
getBendsInPath
has been added to theIBendSelectionTester
interface and is used to check for bends that should be lasso selected. -
Method
getPortsInPath
has been added to theIPortSelectionTester
interface and is used to check for ports that should be lasso selected. -
discardInvalidItems
inItemHoverInputMode
has been renamed toignoreInvalidItems
, and its behavior was reversed. -
The
MoveLabelInputMode
class and its corresponding property onGraphEditorInputMode
have been removed. Label movement is now handled directly byMoveInputMode
. -
Replaced
Dummy
in names with a more descriptive term. In particular:-
In
CreateEdgeInputMode
,dummyEdge
,dummyEdgeGraph
,dummyTargetNode
,,dummyTargetNodePort
,updateDummyEdgeSourcePort
,updateDummyEdgeTargetPort
,getDummyEdgeSnapLines
, andcreateDummyBend
have been renamed topreviewEdge
,previewGraph
,previewEndNode
,previewEndNodePort
,updatePreviewEdgeStartPort
,updatePreviewEdgeEndPort
,getPreviewEdgeSnapLines
, andcreatePreviewBend
. -
The
Visualization.DUMMY
enum value has been renamed toVisualization.PLACEHOLDER
. -
In
PortRelocationHandle
,createDummyEdge
has been renamed tocreatePreviewEdge
.
-
In
-
The event
deleted-selection
ofGraphEditorInputMode
now usesItemsEventArgs
instead ofSelectionEventArgs
. -
Renamed
GraphInputMode.shouldSelectItem
toshouldSelect
. -
The
doStartEdgeCreation
method on theCreateEdgeInputMode
class is now calledstartEdgeCreation
. -
The
doStartDrag
method on theMoveInputMode
class is now calledstartDrag
. -
The
beginDragging
method on theHandleInputMode
class is now calledstartDrag
. -
The
AddLabel
method onGraphEditorInputMode
is now calledstartLabelAddition
. -
The
EditLabel
method onGraphEditorInputMode
is now calledstartLabelEditing
. -
Removed the
PortRelocationHandle.GHOST_VISUALIZATION_STROKE_KEY
constant. Use the new.
CSS class instead.yfiles-edge-relocation-ghost
-
The
LassoTestables.ALWAYS
andSINGLE
singletons have been moved to theILassoTestable
type. -
The
CanvasComponent
listens to and handlesPointerEvents
to intercept user input. Custom styles might need to handlepointer-down
events 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_KEY
toDragDropKeyStates
. -
Removed
KeyEventArgs.originalSource
which is already covered byKeyEventArgs.OriginalEvent.target
. -
Renamed
KeyEventArgs.alt
toKeyEventArgs.altKey
. -
Renamed
KeyEventArgs.shift
toKeyEventArgs.shiftKey
. -
Renamed
KeyEventArgs.control
toKeyEventArgs.ctrlKey
. -
Renamed
KeyEventArgs.meta
toKeyEventArgs.metaKey
. -
The
MouseEventArgs.wheelDelta
property has been renamed towheelDeltaY
. -
The
MouseEventArgs.scrollAmount
property has been removed. -
Removed
CanvasComponent.KeyPress
event and associatedKeyEventType.Press
. Instead, use thekey-down
event or listen to the browser's (deprecated) "keypress" event. -
Renamed
ModifierKeys.WINDOWS
toModifierKeys.META
. -
The order of the two parameters of the
EventRecognizer
function was reversed. -
The CSS class for all snap references was renamed from
yfiles-snap-line
toyfiles-snap-reference
. -
The
SNAP_LINE_STROKE_KEY
was removed. -
The
toolTip
class has been removed.
Incompatible Behavior Changes
-
Changed the default of
PopulateContextMenuEventArgs.showMenu
to false. -
Changed the default of
TextEditorInputMode.textBoxPlacementPolicy
toTextBoxPlacementPolicy.MOVE_TEXT_BOX
. -
The
GraphInputMode.findItems
method now considers the actual z-order of the hit items. -
GraphEditorInputMode
'smoveUnselectedItemsInputMode
now only moves unselected items. Previously it also moved selected items despite its name. -
The
multiSelectionRecognizer
ofGraphEditorInputMode
andGraphViewerInputMode
are not used anymore for marquee and lasso selection. Instead,MarqueeSelectionInputMode
andLassoSelectionInputMode
have their own modifiers for different selection policies. -
LabelDropInputMode.isValidLabelOwner
now only acceptsFreeLabelModel
or that thedraggedLabel
's owner type matches the owner type e.g.INode
,IEdge
, orIPort
. -
The default values of the
NodeReshapeHandleProvider.ratioReshapeRecognizer
property andReshapeHandlerHandle
has been changed tonull
. If no custom recognizer is set,ReshapeHandlerHandle
uses the newHandleInputMode.isDirectionalConstrained
method instead if aHandleInputMode
is found in theIInputModeContext
. -
The default value of
enableSnappingRecognizer
inCreateEdgeInputMode
,HandleInputMode
, andMoveInputMode
has been changed fromCTRL_UP
toALT_UP
. -
The default value of
disableSnappingRecognizer
inCreateEdgeInputMode
,HandleInputMode
, andMoveInputMode
has been changed fromCTRL_DOWN
toALT_DOWN
. -
The default value of
centerReshapeRecognizer
inNodeReshapeHandleProvider
andReshapeHandlerHandle
has been changed fromALT_IS_DOWN
toCtrlIsDown
. -
The default value of
ReparentNodeHandler.reparentRecognizer
has been changed fromSHIFT_IS_DOWN
toCtrlIsDown
. -
GraphEditorInputMode.allowGroupingOperations
is now true by default. -
Refined the event sequence of
CreateEdgeInputMode
to ensure consistency and symmetry between gesture cancellation and completion. -
Reorganized the sequence to include
edge-creation-started
only 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-started
andedge-created
events 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
: theclickHitTestOrder
default value has been changed toGraphItemTypes.ALL
which 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.portCandidateResolutionRecognizer
has been changed fromSHIFT_IS_DOWN
toCtrlIsDown
. -
The default value of the
CreateEdgeInputMode.enforceBendCreationRecognizer
has been changed formCtrlIsDown
toALT_IS_DOWN
. -
The default keyboard shortcuts of several commands have been changed:
-
Command.COLLAPSE_GROUP
now usesAlt+Left
. -
Command.EXPAND_GROUP
now usesAlt+Right
. -
Command.ENTER_GROUP
now usesAlt+Down
. -
Command.EXIT_GROUP
now usesAlt+Up
. -
Command.INCREASE_ZOOM
now usesCtrl+Plus
. -
Command.DECREASE_ZOOM
now usesCtrl+Minus
. -
Command.TOGGLE_EXPANSION_STATE
now usesAlt+Shift+Left
andAlt+Shift+Right
.
-
-
The default value of
TextEditorInputMode.autoCommitOnFocusLost
is 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
IPositionHandler
anymore 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.orthogonalEdgeEditingContext
property. This can be done by enabling thePolylineEdgeStyle.orthogonalEditing
properties of the styles, by setting an apropriatefallbackEdgeHelperProvider
on the usedOrthogonalEdgeEditingContext
or by providing anIOrthogonalEdgeHelper
in the edges' lookup. -
NavigationInputMode
now interprets the direction of arrow keys in view coordinates by default. -
The default lookup of labels now returns an
IPositionHandler
implementation. -
In
CreateEdgeInputMode
it was previously possible to define a fallback forgetPortOwner
ifIHitTester
was removed. This option for defining a fallback is removed and always returnsnull
. -
Improved the
CreateBendInputMode
behavior: Previously, dragging an existing bend triggered thebend-created
event, 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.updateContentBounds
now only considers the items in theRenderTree.contentGroup
instead of therootGroup
when calculating the new bounds. -
The mouse wheel events of the
GraphComponent
now use the browser's native {}
},deltaX
{deltaY
anddeltaMode
values. This implies that the mouse wheel behavior now also respects the client's current system settings.
See the related new features.
Snapping
Incompatible API Changes
-
LabelSnapContext
has been removed, and label snapping is now handled byGraphSnapContext
:-
The
GraphEditorInputMode.labelSnapContext
property and theGraphEditorInputMode.onLabelSnapContextChanged
method have been removed. -
The
CollectLabelSnapLineEventArgs
class has been removed. -
Configuration properties of
LabelSnapContext
have been moved toGraphSnapContext
and renamed. -
The
ILabelSnapContextHelper
interface and theLabelSnapContextHelper
class have been removed. Instead, theILabelSnapResultProvider
interface and the classesLabelSnapResultProvider
andLabelSnapReferenceProvider
have been added. -
The
LabelDecorator.labelSnapContextHelperDecorator
property has been replaced by the propertiessnapReferenceProvider
andsnapResultProvider
.
-
The
-
CollectGraphSnapLinesEventArgs
has been renamed toCollectSnapReferencesEventArgs
. Its methodsaddFixedNodeSnapLine
,addFixedSegmentSnapLine
,addPortSnapLine
, andaddAdditionalSnapLine
have been removed and replaced by the singleaddSnapReference
method. -
GraphSnapContext
has been refactored, and the following members have changed:-
The properties
snapNodesToSnapLines
,snapBendsToSnapLines
,snapSegmentsToSnapLines
,snapBendAdjacentSegments
,snapPortAdjacentSegments
,snapEdgeLabels
,snapNodeLabels
, andsnapPortLabels
have been replaced by the new propertiesSnappableItems
andGridSnappableItems
. -
The
collectVisibleNodePairs
method now takes theCollectSnapReferencesEventArgs
the snap references shall be added to. -
The methods
findSameWidthEntries
andfindSameHeightEntries
have been removed. Instead, theSnapSize
references describing to which size items can snap are provided by thesnapReferences
property. Similarly, thefixedNodeSnapLines
,fixedSegmentSnapLines
,fixedPortSnapLines
, andadditionalSnapLines
properties have been removed. ThesnapReferences
property should be used instead.
-
The properties
-
The
SnapLine.ResourceKey
property has been removed along with most of the staticresourceKey
members used for snapping. Instead, avisualizationType
property of the enum typeSnapReferenceVisualizationType
is used to describe which visualization should be used for theSnapLine
. -
Most subclasses of
SnapLine
have been removed as they only provided properties used for the visualization that are now available onSnapResult
. -
The
SnapTypes
enum used bySnapResult
has been replaced by the newSnapConstraint
class that supports finding common snap locations forSnapResult
with different constraints. -
The
snap
andisSnapped
methods ofSnapResult
have been removed. Instead, aconstraint
property of typeSnapConstraint
has been added that is used to merge possibleSnapResult
and check if a location is valid for a givenSnapResult
. -
The
SnapResult.getVisualCreator
method has been removed and is replaced by the newobjectRenderer
property. -
The factory methods of
SnapResult
have been adjusted:-
createPointSnapResult
has been renamed tocreateSnapResult
. -
createSnapLineSnapResult
has been renamed tocreateLineSnapResult
. -
createLabelSnapResult
has been removed.
-
-
The methods of the snap result providers have been adjusted to support the new
SnapReference
API. Most methods now take one instance of aSnapReference
subclass likeSnapLine
orSnapGrid
. -
The classes
SnapState
,ArrowContainer
, andArrowControl
have been removed. -
The type of the
SnapContext
properties of all input modes has been changed fromSnapContext
toGraphSnapContext
. -
Most classes and members that had
SnapLine
in their name have been renamed to includeSnapReference
instead. -
The
initialBounds
property and theReshapeRectangleContext.CalculateBounds
method have been renamed toinitialLayout
andcalculateLayout
. -
The
GraphEditorInputMode.snapContext
property is now set per default and may not benull
. It is disabled per default. -
Renamed the
GraphSnapContext.nodeToNodeDistance
property tonodeDistance
. -
Renamed the
GraphSnapContext.edgeToEdgeDistance
property toedgeDistance
.
See the related new features.
Clipboard
Incompatible API Changes
-
The values
LABEL_MODEL_PARAMETER
andPORT_LOCATION_MODEL_PARAMETER
have been removed from theCloneTypes
enum as those parameter are typically immutable, so cloning them has no effect. -
ElementCopiedCallback
has been renamed toItemCopiedCallback
. -
GraphViewerInputMode
'selements-copied
event has been renamed toitems-copied
. -
GraphEditorInputMode
'selements-copied
,elements-cut
,elements-copied
,elements-pasted
andelements-duplicated
events were renamed toitems-copied
, etc. -
GraphClipboards
elements-cut
,-Cutting
,-Copying
,-Copied
,-Pasting
,-Pasted
,-Duplicating
, and-Duplicated
events were renamed toitems
instead ofelements
and use the newGraphClipboardEventArgs
. -
GraphClipboards
onElementCut
,-Copied
, and-Pasted
methods were renamed to start with
and take an additionalOnItem
-ClipboardOperationContext
as a parameter. -
GraphClipboard.removeElements
has been renamed toremoveItems
. -
GraphClipboard.isFoldingStateElement
has been renamed toisFoldingStateItem
. -
GraphClipboard.createContext
now takes an additionalIInputModeContext
parameter that should be returned in the new contexts lookup. -
The
GraphClipboard.clipboardGraph
property is now read-only. -
The parameters of
GraphClipboard
'sCopy
method have been rearranged so default values for optional parameters could be added. -
The methods
createClipboardGraph
,createToClipboardCopier
,createFromClipboardCopier
,createDuplicateCopier
, andcreateDefaultClipboardIdProvider
fromGraphClipboard
that were used to lazily initialize the corresponding properties have been removed. -
GraphClipboard.paste
now takes an enumerable ofIModelItems
astargetOwners
parameter instead of atargetFilter
predicate. -
GraphClipboard.isFoldingStateElement
is now an instance method and doesn't have an owner parameter anymore. -
The
GraphClipboard.pasteDelta
property has been renamed topasteOffset
. It is now modified by theGraphClipboard
'sCut
,Copy
,Paste
, andDuplicate
methods instead of the corresponding methods onGraphEditorInputMode
. -
The
GraphEditorInputMode.pasteDelta
property has been removed and replaced by the newGraphClipboard.pasteOffsetIncrement
property. -
IClipboardHelper
's methodsCut
,Copy
, andPaste
have been renamed toonCut
,onCopied
, andonPasted
. -
IClipboardHelper
's methodsCut
andCopy
don't return anobject
anymore and theobject
parameter ofPaste
andshouldPaste
has been removed. ForCut
/Copy
andPaste
the sameIClipboardHelper
method is now used so any state that should be transfered can be stored in a custom implementation. -
IClipboardHelper
has new methodsshouldDuplicate
andonDuplicated
which have to be implemented, now. -
GraphClipboard
`s methodsgetMemento
andgetClipboardHelper
have been removed. -
GraphClipboard
's protectedCopy
andPaste
methods now take the newClipboardOperationContext
as parameter instead of thesourceGraphs
andfilter
predicates. -
GraphClipboard
'sCut
,Copy
,Paste
, andDuplicate
methods now use anIEnumerable
instead of a filter predicate to determine the subgraph to copy. -
GraphClipboard
'sCreate*Filter
methods have been removed. -
The
GraphClipboard
now usesClipboardGraphCopier
instances for itstoClipboardCopier
,fromClipboardCopier
, andduplicateCopier
. -
The
ParentNodeDetectionModes
has been reduced to contain only the mainly used options. The optionroot
has been renamed toNONE
, and the optionsALLOW_SELF
andFORCE
as well as theMODE_MASK
andMODIFIER_MASK
have been removed. ThetargetNode
method can be overridden if the reduced modes are not suitable and may call the newfindParentByPreviousParent
method to simulate the oldFORCE
setting. -
GraphClipboard
`sgetTargetNode
methods now take an additionalClipboardOperationContext
parameter, and thegetTargetNode
overload for nodes also takes apasteLocation
as an additional parameter. -
GraphComponent
instances now use a sharedGraphClipboard
per default. To revert to the previous behavior, a newGraphClipboard
instance can be set on eachGraphComponent
. -
For consistency reasons, the property
GraphClipboard.empty
is now calledisEmpty
.
See the related new features.
Folding
Incompatible API Changes
-
Interface
IFolderNodeConverter
has a newupdateGroupNodeState
method. -
Interface
IFoldingEdgeConverter
has a newupdateMasterEdges
method. -
FolderNodeConverter
now relies onFolderNodeDefaults
to configure initialization and update of states. -
FoldingEdgeConverter
andMergingFoldingEdgeConverter
now rely onFoldingEdgeDefaults
to 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
IFolderNodeConverter
andIFoldingEdgeConverter
implementations. The default implementations already synchronize the tags. -
In the graph of a folding view, the
createGroup
method now always creates a group even if theisExpanded
predicate specified in theFoldingManager.createFoldingView
method specifies otherwise. Create the group on the master graph if you want the predicate to be respected.
See the related new features.
Lookup
Incompatible API Changes
-
The methods
setLookupImplementation
andgetLookup
have been removed fromGraph
. Instead theLookup
method should be overridden if the default lookup behavior should be replaced. -
The methods
setLookup
andgetLookup
have been removed fromGraphWrapperBase
. Instead, theLookup
method should be overridden if the default lookup behavior should be replaced. -
The
node
parameter of the methods in the interfacesIGroupPaddingProvider
,INodeSizeConstraintProvider
, andIGroupBoundsCalculator
has been removed. -
The
edge
parameter of the methods in the interfacesIEdgePortHandleProvider
,IBendCreator
, andIOrthogonalEdgeHelper
has been removed. -
The
label
parameter of the methods in the interfacesILabelModelParameterProvider
, andILabelModelParameterFinder
has been removed. -
The model item parameter in
ISnapReferenceProvider.addSnapReferences
has been removed. -
The
ILabelModelParameter
parameter ofILabelModel.getContext
has been removed andILabelModel
doesn't extendILookup
anymore. Instead, the lookup returned bygetContext
should be used for all lookup calls. -
The
IPortLocationModelParameter
parameter ofIPortLocationModel.getContext
has been removed andIPortLocationModel
doesn't extendILookup
anymore. Instead, the lookup returned bygetContext
should be used for all lookup calls. -
The
FallbackEdgeHelper
property and theOrthogonalEdgeEditingContext.getOrthogonalEdgeHelper
method have been replaced by the propertiesfallbackEdgeHelperProvider
andorthogonalEdgeHelperProvider
. -
The
INodeInsetsProvider
interface was renamed toIGroupPaddingProvider
. -
Renamed
LookupDecorator.setImplementation
toaddConstant
. -
Renamed
LookupDecorator.setFactory
toaddFactory
. -
Renamed
LookupDecorator.setImplementationWrapper
toaddWrapperFactory
. -
Renamed
LookupDecorator.hideImplementation
to Hide. -
Renamed lookup decorators in general by removing the
decorator
suffix. For example,graphDecorator.EdgeDecorator.PositionHandlerDecorator.HideImplementation
is nowgraphDecorator.Edges.PositionHandler.Hide
. -
Removed
LookupDecorator.nullIsFallback
. Instead, use the predicate of theaddFactory
method or return the original instance in theaddWrapperFactory
method. -
Removed
LookupDecorator.DecorateNull
. Instead, implement the desired behavior inaddWrapperFactory
. -
Removed the
SimpleNode.lookupImplementation
property,SimpleEdge
,SimpleBend
,SimpleLabel
andSimplePort
. Instead, use the newGetDecorator
method to adjust the item's lookup. -
The
SimpleNode
,SimpleEdge
,SimpleBend
,SimpleLabel
andSimplePort
classes are now sealed, and theirlookup
method is no longer virtual. To adjust the item's lookup, use theGetDecorator
method. -
Removed
CanvasComponent.inputModeContextLookup
andCanvasComponent.inputModeContextLookupChain
. Instead, use the newgetInputModeContextDecoratorFor
method to decorate the input mode context lookup. -
The
EdgeDecorator.getDecoratorFor
method,NodeDecorator
, etc. no longer has thenullIsFallback
anddecorateNull
parameters.
GraphML
Incompatible API Changes
-
The methods
GraphMLIOHandler.addInputMapperFuture
andGraphMLIOHandler.addInputHandlerFactory
have been removed, together with their support classes. -
Type and property annotations via the
$meta
attributes are not supported anymore. Instead, metadata has to be registered withGraphMLIOHandler.addTypeInformation
. -
The convenience
GraphMLSupport
class, the predefinedICommand.OPEN
andICommand.SAVE
commands, and theStorageLocation
enum have been removed. Use custom application code instead. -
The
addRegistryInputMapper
andaddRegistryOutputMapper
methods have been removed fromGraphMLIOHandler
, since theMapperRegistry
has been removed. To read or write additional per-item data, use theaddInputMapper
oraddOutputMapper
methods, instead.
View-Layout-Bridge
Incompatible API Changes
-
Renamed
ItemMapping.delegate
tomapperFunction
. -
Renamed
ItemCollection.delegate
topredicate
. -
Renamed
LayoutExtensions.MorphLayout
toapplyLayoutAnimated
. -
Renamed
LayoutExecutor.MorphDuration
toanimationDuration
. -
Renamed
LayoutExecutor.createMorphAnimation
tocreateLayoutAnimation
. -
The
LayoutGraphAdapter.PortDummyNodeDataKey
constant has been renamed toPORT_HELPER_NODE_DATA_KEY
. -
Several expert arguments have been removed from the convenience functions
applyLayout
andapplyLayoutAnimated
. These areeasedAnimation
,updatedContentBound
,allowUserInteraction
,configureTableLayout
,considerViewportLimiter
andhideEdgesAtEdges
. -
Some default values of
LayoutExecutor
have been changed to be in line with default behavior ofIGraph.applyLayout
/applyLayoutAnimated
that 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
, andtargetBoundsInsets
were removed fromIGraph.applyLayout
. -
Renamed
LayoutExecutorAsync.createMorphAnimation
tocreateLayoutAnimation
. -
Boolean
LayoutExecutorAsync.fixPorts
property is replaced by anItemMapping
portPlacementPolicies
, that allows to specify a policy for the handling of each individual port. -
The static
from
method has been removed from theItemMapping
,ItemCollection
, and. -
ContextItemMapping
classes. -
The deprecated
LayoutExecutorAsync.graphControl
property has been removed. Use theLayoutExecutorAsync.graphComponent
property instead. -
Boolean
LayoutExecutor.fixPorts
property is replaced by anItemMapping
portPlacementPolicies
, that allows to specify a policy for the handling of each individual port. -
LayoutExecutor.automaticEdgeGrouping
has been removed. Edges at the same port are now always automatically port grouped unless port groups have been defined explicitly. -
LayoutGraphAdapter.automaticEdgeGrouping
has been removed. Edges at the same port are now always automatically port grouped unless port groups have been defined explicitly. -
Replaced
LayoutExecutor.labelPreferredPlacementPolicy
withItemMapping
LayoutExecutor.labelPlacementPolicies
. -
Renamed Enum
LabelPreferredPlacementPolicy
toLabelPlacementPolicy
. -
Removed value
FROM_DESCRIPTOR
.PreferredPlacementDescriptor
s are now automatically considered when specified throughLayoutData
s.-
Renamed value
FROM_MODEL
toPREFER_MODEL
. -
Renamed value
FROM_PARAMETER
toPREFER_PARAMETER
. -
Added value
KEEP_PARAMETER
, which suppresses the write-back of label positions to the view graph.
-
Renamed value
-
Replaced
LayoutGraphAdapter.labelPreferredPlacementPolicy
withItemMapping
LayoutGraphAdapter.labelPlacementPolicies
. -
Changed property
PortAdjustmentPolicy
ofLayoutExecutor
class to anItemMapping
portAdjustmentPolicies
which allows for different values for each port. The default isPortAdjustmentPolicy.LENGTHEN
. -
Changed property
PortAdjustmentPolicy
ofLayoutGraphAdapter
class to anItemMapping
portAdjustmentPolicies
which allows for different values for each port. The default isPortAdjustmentPolicy.LENGTHEN
. -
Renamed the
LayoutExecutor.duration
property toanimationDuration
. -
Removed the
ContextItemMapping
class. -
The properties
LayoutExecutor.selectionModel
andLayoutGraphAdapter.selectionModel
have been removed, meaning that selected items of theIGraph
are no longer automatically marked in theLayoutGraph
via 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 specificLayoutData
property of the layout algorithms. -
The
TableLayoutConfigurator.prepare
andLayoutExecutor.prepareTableLayout
methods now return aPartitionGridData
instance. -
Renamed the
YGraphAdapter
class toStructureGraphAdapter
.-
Renamed the
YGraphAdapter.yGraph
property tostructureGraph
. -
Renamed
YGraphAdapter.createEdgeEnumerable
tocreateOriginalEdgeList
. -
Renamed
YGraphAdapter.createNodeEnumerable
tocreateOriginalNodeList
. -
Renamed
YGraphAdapter.createEdgeList
tocreateCopiedEdgeList
. -
Renamed
YGraphAdapter.createNodeList
tocreateCopiedNodeList
. -
Renamed
YGraphAdapter.createMapper
tocreateCopiedToOriginalNodeWrapper
andcreateCopiedToOriginalEdgeWrapper
. -
Renamed
YGraphAdapter.createDataMap
tocreateOriginalToCopiedNodeWrapper
andcreateOriginalToCopiedEdgeWrapper
.
-
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 originalIGraph
items.
Incompatible Behavior Changes
- Edges at the same port are now always automatically port grouped unless port groups have been defined explicitly.
-
The
LayoutGraphAdapter
class does no longer offer a method to create a layout graph several times but is now meant to create exactly one layout graph copy which can be accessed via theLayoutGraph
property and initialized with methodLayoutGraphAdapter.initialize
. After initialization, changing properties of theLayoutGraphAdapter
has no effect anymore.
See the related new features.
Layout
Incompatible API Changes
-
The public constructors of
ItemMapping
andItemCollection
have been removed. Instead the instances returned by theLayoutData
properties should be used to configure theLayoutData
. -
The optional
ItemMapping
parameter ofGenericLayoutData.addItemMapping
has been removed. -
The optional
ItemCollection
parameter ofGenericLayoutData.addItemCollection
has been removed. -
For
GenericLayoutData
, the methods toadd
anItemMapping
or anItemCollection
are now overloads and no longer includeLayoutNode
,LayoutEdge
, etc in their name. For example, theaddNodeItemCollection
method is now namedaddItemCollection
. -
LayoutExecutor.abortHandler
was removed and replaced by the two propertiesLayoutExecutor.stopDuration
andLayoutExecutor.cancelDuration
. -
OrganicLayout
:OrganicLayoutParallelSubstructureStyle
has been renamed toOrganicLayoutParallelSubstructureStyle
. -
AlignmentStageAlignmentPolicy
;SNAP_X_Y
has been renamed toSNAP_XY
. -
Renamed the
SubgraphLayout
class toSubgraphLayoutStage
and renamed the respective layout data class fromSubgraphLayoutData
toSubgraphLayoutStageData
. -
Renamed
EdgeBundlingStage
toBundledEdgeRouter
. -
Renamed
GivenCoordinatesStage
toGivenCoordinatesLayout
. -
Renamed
GivenCoordinatesStageData
toGivenCoordinatesLayoutData
. -
The
OrientationLayout
class has been renamed toOrientationStage
.-
Furthermore, the following methods have been removed from that class:
isOrientationMirrored
, Transform,prepareTransform
,completeTransform
,createOrientedNodeHalo
,createOrientedInsets
andcreateOrientedNodeSize
.
-
Furthermore, the following methods have been removed from that class:
-
Renamed
BendConverter
toBendSubstitutionStage
. -
The
OrientationLayout.horizontalOrientation
property has been removed. To check for a horizontal orientation, check if Orientation property equalsLayoutOrientation.LEFT_TO_RIGHT
orLayoutOrientation.RIGHT_TO_LEFT
. -
Renamed
GraphLayoutLineWrapper
toLineWrappingStage
. -
Renamed
HideGroupsStage
toGroupHidingStage
. -
Renamed
TemporaryGroupNodeInsertionStage
toTemporaryGroupInsertionStage
and the respective data class fromTemporaryGroupNodeInsertionData
toTemporaryGroupInsertionData
. -
Renamed
BorderLineSide
to Side, moved to namespace Layout and renamed its values:North
toSide.TOP
,East
toSide.RIGHT
,South
toSide.BOTTOM
, andWest
toSide.LEFT
. -
Moved
BorderLine
andBorderLineSegment
to namespace Layout. -
Removed all methods and properties from Layout
class.Direction
and converted it to an enum. -
Removed the
NodeHalo
class. Halos are now specified asInsets
and called node margins. in the correspondingLayoutData
(e.g.HierarchicalLayoutData.nodeMargins
).-
The properties previously named
nodeHalos
have been renamed tonodeMargins
for 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.nodeHalo
toFromSketchLayerAssigner.nodeMargin
. -
Renamed
TemporaryGroupDescriptor.halo
to Margins. -
Renamed
NodeHalo.NODE_HALO_DP_KEY
toLayoutKeys.NODE_MARGIN_DATA_KEY
.
-
The properties previously named
-
Renamed
LayoutExecutor.targetBoundsInsets
totargetBoundsPadding
. -
Renamed
GroupingKeys.GROUP_NODE_INSETS_DP_KEY
toGROUP_NODE_PADDING_DATA_KEY
and moved the key toLayoutKeys
. -
Renamed
GroupingKeys.MINIMUM_NODE_SIZE_DP_KEY
toLayoutKeys.MINIMUM_GROUP_NODE_SIZE_DATA_KEY
. -
Renamed
InsetsGroupBoundsCalculator.defaultInsets
toGroupBoundsCalculator.defaultPadding
andInsetsGroupBoundsCalculator.considerNodeHalos
toGroupBoundsCalculator.considerNodeMargins
. -
Renamed
TemporaryGroupDescriptor.insets
to Padding. -
Renamed
Graph.reInsertNode
/Edge
toLayoutGraph.reinsert
. -
LayoutGraphHider
:-
Removed properties
fireGraphEvents
,Graph
and methodsHideEdges
,hideSelfLoops
,simplifyGraph
,hideMultipleEdges
. -
Replaced all methodes to hide and unhide several nodes or edge by Hide(
IEnumerable
<Node>
), Hide(IEnumerable
<Edge>
) and Unhide(IEnumerable
<Node>
), Unhide(IEnumerable
<Edge>
).
-
Removed properties
-
PortCalculator
,IIntersectionCalculator
, andIntersectionCalculatorKeys
have been removed. Instead, theLayoutExecutor.portAdjustmentPolicy
property should be set to a suitable value. -
Renamed
BorderLine.createMin
tocreateMinimum
. -
Renamed
BorderLine.createMax
tocreateMaximum
. -
GraphPartitionManager
is removed,LayoutGraphHider
provides the same functionality. -
The methods
PortCalculator.calculatePorts
andPortCalculator.equalsEps
have been removed. -
The following methods have been removed from the
ReverseEdgesStage
:ReverseEdgesStage.findReversedTreeEdges
,ReverseEdgesStage.reverseEdge
andReverseEdgesStage.reverseEdges
. -
Renamed
MirrorModes
toMirroredOrientations
andOrientationLayout.mirrorMode
toMirroredOrientations
. -
The
AbortHandler.checkFailed
property has been removed. To achieve the same functionality, theLayoutAbortController
(new name of theAbortHandler
) can be subclassed, overriding itscheck
method 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 passednull
values. -
Replaced properties
xOffset
andyOffset
of Layoutclass.PortCandidate
by a single propertyoffset
of typePoint
. -
SequentialLayout
: updated Layouts property to be a read-only List<
. RemovedILayoutAlgorithm
>appendLayout
,appendLayouts
, andremoveAll
methods, as their functionality is now handled by the list methods. -
PortConstraint
s andPortCandidate
s have been unified and renamed toLayoutPortCandidate
. -
PortDirections
andPortSide
have been unified asPortSides
. The sides have been renamed. -
PortCandidateSet
s have been replaced byNodePortCandidates
, and collections ofPortCandidate
s for edges have been replaced byEdgePortCandidates
. -
The port-related settings in the
LayoutData
classes have been combined into a sub-LayoutData
Ports. -
The keys in
PortConstraintKeys
have 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
BufferedLayout
class has been removed. To apply a layout algorithm on a copy of aLayoutGraph
instance useLayoutGraph.createCopy
method to get a copy, then apply the layout on it and, finally, write back the result usingLayoutGraphCopyData.commitLayoutToOriginalGraph
. -
The
CompositeLayoutStage
class has been removed. If a complex composition of layout stages is required, the newLayoutStageStack
class can be used instead. To get anILayoutAlgorithm
that is then applied likeCompositeLayoutStage
was before,LayoutStageStack.linkCoreLayouts
method must be called. -
Merged
MinimumSizeGroupBoundsCalculator
andInsetsGroupBoundsCalculator
into the newGroupBoundsCalculator
class. -
LayoutMultiplexer
has been removed. The features ofComponentLayout
(COMPONENT_LAYOUT_DATA_KEY
) orRecursiveGroupLayout
(GROUP_NODE_LAYOUT_DATA_KEY
) can be used instead. -
The classes
FixPortLocationStage
andFixPortLocationStageData
have been removed from the library. To correct the port locations after applying a layout use thePortPlacementStage
class. -
PortPlacementStage.pathCorrection
has been replaced byPortPlacementStage.routeCorrectionPolicy
of enum typeRouteCorrectionPolicy
. -
The
SnapOuterPortsToNodeBorderStage
class has been removed. -
Removed
NormalizeGraphElementOrderStage
. UsenodeComparator
andedgeComparator
ofLayoutExecutor
instead. -
The classes
ChannelEdgeRouter
,OrthogonalPatternEdgeRouter
andOrthogonalSegmentDistributionStage
have been removed from the library. Their functionality is superseded by theEdgeRouter
routing algorithm.-
To configure the
EdgeRouter
to generate a style that is similar to the removedChannelEdgeRouter
, set thestopDuration
property 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
PortConstraintConfigurator
class has been removed. -
Removed the classes
PartitionLayout
andPartitionLayoutData
. -
The
FamilyTreeLayout
class has been removed. -
Removed
SplitEdgeStage
. -
The read/write properties
MinimumSizeGroupBoundsCalculator.minimumNodeSizeDpKey
,MinimumSizeGroupBoundsCalculator.groupNodeInsetsDpKey
andInsetsGroupBoundsCalculator.groupNodeInsetsDpKey
have been removed. The bounds calculator classes now always use the values defined via the keysLayoutKeys.MINIMUM_GROUP_NODE_SIZE_DATA_KEY
andLayoutKeys.GROUP_NODE_PADDING_DATA_KEY
. Using theIGraph
API, the insets and minimum sizes are registered automatically, so that this change has no effect. -
The read/write properties
SubgraphLayout.affectedNodesDpKey
andSubgraphLayout.affectedEdgesDpKey
have been removed. They were replaced by static read-only keysSubgraphLayoutStage.SUBGRAPH_NODES_DATA_KEY
andSubgraphLayoutStage.SUBGRAPH_EDGES_DATA_KEY
. -
Removed
LayoutKeys.NODE_ID_DP_KEY
andLayoutKeys.EDGE_ID_DP_KEY
. -
The
HandleNaNCoordinatesStage
has been removed. -
Class
MultiStageLayout
has been removed from the API. The classesHierarchicalLayout
(formerlyHierarchicLayout
),OrganicLayout
,OrthogonalLayout
,TreeLayout
,RadialTreeLayout
(formerlyBalloonLayout
),SeriesParallelLayout
,RadialLayout
,CompactDiskLayout
, andRadialGroupLayout
(formerlyCactusGroupLayout
) now directly implementILayoutAlgorithm
. These classes offer a newlayoutStages
property that allows to access the mutable stack ofILayoutStages
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
edgeRoutingStyle
and those on edge-specific classes have been renamed toRoutingStyle
.-
The
EdgeRoutingStyle
enum has been renamed toEdgeRouterRoutingStyle
. -
The
EdgeRoutingStyle
enum has been renamed toSingleLayerSubtreePlacerRoutingStyle
. -
The
LayeredRoutingStyle
enum has been renamed toLevelAlignedSubtreePlacerRoutingStyle
. -
The
EdgeRoutingStrategy
enum has been renamed toRadialLayoutRoutingStyle
. -
The
EdgeRoutingStrategy
enum has been renamed toPartialLayoutRoutingStyle
. -
The
EdgeRoutingStyle
enum has been renamed toHierarchicalLayoutRoutingStyle
while the oldRoutingStyle
class has been renamed toRoutingStyleDescriptor
.
-
The
-
Renamed
AbortHandler
toLayoutAbortController
. -
The
maximumDuration
property is renamed tostopDuration
in all public API usages. -
StopDurations
that were of type long are now of typeTimeSpan
. -
StopDurations
now 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 onLayoutData
classes but only on theLayoutExecutor
. -
Static methods on
LayoutAbortController
(formerlyAbortHandler
) likegetFromGraph
have been removed since the handler instance can easily be accessed via theLayoutGraphContext
when working withLayoutGraph
. -
The default values of properties
LayoutAbortController.stopDuration
andLayoutAbortController.cancelDuration
has been changed fromTimeSpan.Zero
toTimeSpan.MaxValue
. Previously,Zero
was interpreted as unlimited time, which is not the case anymore. -
The default value of the algorithm properties
RankAssignment.maximumDuration
andNodeAggregation.maximumDuration
(now calledstopDuration
) has been changed fromTimeSpan.Zero
toTimeSpan.MaxValue
. Zero is no longer interpreted as an unrestricted running time but is the shortest possible time. -
Removed public methods
hideGroupNodes
andunhideGroupNodes
ofGroupHidingStage
. -
Moved nested
BorderLine
class.Segment
to top-levelBorderLineSegment
class. -
Renamed Grow to Enlarge,
addOffset
toaddPositionOffset
, Min tominPosition
and Max tomaxPosition
. -
Removed the
BorderLine.adoptValues
method. -
Removed
BorderLine.prev
andBorderLine.next
. Use methodsBorderLineSegment.previous
andBorderLineSegment.next
instead. -
Converted
BorderLine.firstSegment
,BorderLine.lastSegment
,BorderLineSegment.previous
andBorderLineSegment.next
from methods to readonly properties. Renamed Prev to Previous. - Removed the Maps class.
-
Layout data properties that are meant for publishing results now contain the word
Result
in their name: RenamedCircularLayoutData.circleIds
toCircularLayoutData.circleIdsResult
,HierarchicLayoutData.layerIndices
toHierarchicalLayoutData.layerIndicesResult
,HierarchicLayoutData.sequenceIndices
toHierarchicalLayoutData.sequenceIndicesResult
,OrganicLayoutData.zCoordinates
toOrganicLayoutData.zCoordinatesResult
,RadialLayoutData.nodeInfos
toRadialLayoutData.nodePlacementsResult
, andParallelEdgeRouterData.routedParallelEdges
toParallelEdgeRouterData.routedMultiEdgesResult
.-
They are now all made readonly and initialized with an
IMapper
instance.
-
They are now all made readonly and initialized with an
-
Updated the constructor of
DpKeyBase
and subclasses to accept a single string parameter 'ID' for unique identification.-
Removed properties
DpKeyBase.declaringType
andDpKeyBase.name
. -
Made
DpKeyBase
class abstract.
-
Removed properties
-
The
TemporaryGroupDescriptor
used byTemporaryGroupInsertionStage
class to define temporary group nodes now does not allow that propertiesInsets
,minimumSize
andmargins
(formerlyHalo
) arenull
anymore. Previously this was the default which is nowInsets.EMPTY
,Size.EMPTY
andInsets.EMPTY
, meaning that the behavior does not change. -
The
CopiedLayoutGraph
class was removed from the API. To create a copy of a layout graph, the new factoryLayoutGraph.createCopy
method may be used. - Methods and and properties with "BoundingBox" in their name have been renamed to include "Bounds" instead.
-
Removed the
YPointPath
class. Instead of this class an array or more generally anIEnumerable
of typePoint
[] is now used in API members.-
Changed value to of
HierarchicLayout.ALTERNATIVE_EDGE_PATH_DP_KEY
,ClearAreaLayout.EXPANDED_NODE_ORIGINAL_EDGE_PATH_DP_KEY
andGivenCoordinatesStage.EDGE_PATH_DP_KEY
toIEnumerable
<
.Point
> -
Changed
EdgeRouterBusDescriptor
propertiesbusPoints
andcomputedBusPoints
to typePoint
[].
-
Changed value to of
-
Removed the
IDataProvider
interface and refactored the whole way data is registered with aLayoutGraph
instance. The replacement ofIDataProvider
is the genericIMapper
interface. It allows setting and getting data via an indexer.-
Removed the methods
LayoutGraph.addDataProvider
andremoveDataProvider
. Data is now registered and removed using the methods on the newLayoutGraphContext
class (e.g.addItemData
,addData
,remove
). -
Removed the
LayoutGraph.dataProviderKeys
property.
-
Removed the methods
-
Removed the look-up keys
GroupingKeys.GROUP_DP_KEY
,GroupingKeys.NODE_ID_DP_KEY
andGroupingKeys.PARENT_NODE_ID_DP_KEY
which were necessary to define grouping information forLayoutGraph
instances. This can now be achieved via the helperLayoutGraphGrouping
class or directly via instance methods such asLayoutGraph.setIsGroupNode
. -
The
GraphDpKey
class was replaced byValueDataKey
. -
Removed the
GraphTransformer
class; use factory methods fromLayoutTransformations
class instead to create stages that apply transformation operations on aLayoutGraph
. -
Replaced
IComparer
interface usages with Comparison function delegates. -
Removed the
LayoutGraphUtilities
class. The newLayoutEdge.resetPath
method replacesLayoutGraphUtilities.resetPath
method. The newParallelEdgeRouter.routeEdgesParallel
method replacesLayoutGraphUtilities.routeEdgesParallel
method. -
Methods
LayoutGraphUtilities.getBoundingBox
were combined to one more general, moved toLayoutGraph
class and made an instance method.
Incompatible Behavior Changes
-
Method
LayoutGraph.reverseEdge
now reverses the edge path too. To exchange only source and target of an edge useLayoutGraph.changeEdge
method.
See the related new features.
Layout Data
Incompatible API Changes
-
The type
SingleItem
<
was removed. Affected properties useTItem
>ItemCollection
<
instead.TItem
> -
Properties of type
ItemMapping
inLayoutData
classes are now named using plural consistently. -
The value type of properties
HierarchicalLayoutData.layerIndicesResult
,HierarchicalLayoutData.sequenceIndicesResult
,HierarchicalLayoutData.givenLayersIndices
,RadialLayoutData.layerIds
andCircularLayoutData.circleIdsResult
has 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_KEY
andCircularLayout.CIRCLE_ID_RESULT_DATA_KEY
has 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.optimizeSwimlaneDistances
property has been removed. The behavior does not change and is the same as the old default where the property was disabled. OverrideDrawingDistanceCalculator.getMinimumDistance
method and assign zero to nodes that are in different rows/columns to get the same behavior as when previously enabling the property. -
Property
SimplexNodePlacer.swimLaneCrossingWeight
has been renamed tolayoutGridCrossingWeight
. Note that the class has been renamed toCoordinateAssigner
. -
Removed
groupCompactionStrategy
. -
Renamed
SimplexNodePlacer.groupCompactionStrategy
togroupCompaction
and changed its type to boolean. -
In the sub-data
SequenceConstraintData
of theHierarchicalLayoutData
placeBefore
andplaceAfter
were replaced byPlaceInOrder
. -
In the sub-data
LayerConstraintData
of theHierarchicalLayoutData
placeAbove
andplaceBelow
were replaced byPlaceInOrder
. -
HierarchicalLayout.gridSpacing
: made grid spacing behavior consistent across all layouts by throwing an exception for negative values. -
NodeLayoutDescriptor.nodeLabelMode
was 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
NodeLabelMode
enum was removed. -
Renamed
LayerType
toHierarchicalLayoutLayerType
. -
Renamed
DefaultLayerSequencer
toDefaultSequencer
. -
Renamed all types, methods and properties containing "hierarchic" to "hierarchical" including
HierarchicLayout
, which is renamed toHierarchicalLayout
. -
Moved
HierarchicLayout.stopAfterLayering
/Sequencing toHierarchicalLayoutCore
. -
Replaced
HierarchicLayout
propertiesBackLoopRouting
&backLoopRoutingForSelfLoops
withHierarchicalLayoutEdgeDescriptor.backLoopRouting
, where it can now be specified per edge (HierarchicalLayoutData.edgeDescriptors
) or for all edges at once (HierarchicalLayout.defaultEdgeDescriptor
). -
Removed properties
sourcePortOptimization
andtargetPortOptimization
fromHierarchicalLayoutEdgeDescriptor
class. -
LayerConstraintData
no longer inherits fromLayoutData
. -
SequenceConstraintData
no longer inherits fromLayoutData
. -
Renamed
IPortAllocator
toIHierarchicalLayoutPortAssigner
. -
Renamed
DefaultPortAllocator
toHierarchicalLayoutPortAssigner
. -
Separated
HierarchicLayout.INCREMENTAL_HINTS_DP_KEY
inINCREMENTAL_NODE_HINTS_DATA_KEY
andINCREMENTAL_EDGE_HINTS_DATA_KEY
. -
Separated enum
IncrementalHint
inIncrementalNodeHint
for nodes andIncrementalEdgeHint
for edges. -
Separated
HierarchicLayoutData.incrementalHints
inHierarchicalLayoutData.incrementalNodes
andHierarchicalLayoutData.incrementalEdges
.incrementalNodes
now 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.nodeToNodeDistance
property toDrawingDistanceCalculator.nodeDistance
. -
Renamed the
DefaultDrawingDistanceCalculator.edgeToEdgeDistance
property toDrawingDistanceCalculator.edgeDistance
. -
Renamed the
HierarchicLayout.nodeToNodeDistance
property tonodeDistance
. -
Renamed the
HierarchicLayout.edgeToEdgeDistance
property toedgeDistance
. -
Renamed
EdgeLayoutDescriptor
toHierarchicalLayoutEdgeDescriptor
. -
Renamed
HierarchicLayout.edgeLayoutDescriptor
todefaultEdgeDescriptor
. -
Renamed and moved
HierarchicLayoutCore.EDGE_LAYOUT_DESCRIPTOR_DP_KEY
toHierarchicalLayout.EDGE_DESCRIPTOR_DATA_KEY
. -
Renamed
HierarchicLayoutData.edgeLayoutDescriptors
toedgeDescriptors
. -
Renamed
NodeLayoutDescriptor
toHierarchicalLayoutNodeDescriptor
. -
Renamed
HierarchicLayout.nodeLayoutDescriptor
todefaultNodeDescriptor
. -
Renamed and moved
HierarchicLayoutCore.NODE_LAYOUT_DESCRIPTOR_DP_KEY
toHierarchicalLayout.NODE_DESCRIPTOR_DATA_KEY
. -
Renamed
HierarchicLayoutData.nodeLayoutDescriptors
tonodeDescriptors
. -
Renamed "Layerer" to "LayerAssigner" in the following types and members;
-
Renamed
ILayerer
toILayerAssigner
. -
Moved
HierarchicLayout.fixedElementsLayerer
toHierarchicalLayoutCore
and renamed tofixedElementsLayerAssigner
. -
Moved
HierarchicLayout.fromScratchLayerer
toHierarchicalLayoutCore
and renamed tofromScratchLayerAssigner
. -
Renamed
WeightedLayerer
toWeightedLayerAssigner
. -
Renamed
ConstraintIncrementalLayerer
toConstraintIncrementalLayerAssigner
. -
Renamed
MultiComponentLayerer
toMultiComponentLayerAssigner
. -
Renamed
MultiComponentLayerer.singleComponentLayerer
tosingleComponentLayerAssigner
. -
Renamed
AspectRatioComponentLayerer.singleComponentLayerer
tosingleComponentLayerAssigner
. -
Renamed
TopologicalLayerer
toTopologicalLayerAssigner
. -
Renamed
AspectRatioComponentLayerer
toAspectRatioComponentLayerAssigner
. -
Renamed
BFSLayerer
toBfsLayerAssigner
. -
Renamed
GivenLayersLayerer
toGivenLayersAssigner
. -
Renamed
HierarchicLayoutCore.createIncrementalLayerer
tocreateIncrementalLayerAssigner
. -
Renamed
HierarchicLayoutData.bfsLayererCoreNodes
tobfsLayerAssignerCoreNodes
. -
Renamed
AsIsLayerer
toFromSketchLayerAssigner
.
-
Renamed
-
Renamed
GivenLayersLayerer.LAYER_ID_DP_KEY
toLAYER_INDEX_DATA_KEY
. -
Renamed
HierarchicLayoutData.givenLayersLayererIds
togivenLayersIndices
. -
Removed
HierarchicLayoutData.constraintIncrementalLayererAdditionalEdgeWeights
. -
Renamed
AsIsSequencer
toFromSketchSequencer
. -
Renamed
SimplexNodePlacer.barycenterMode
toSymmetryOptimizationStrategy
and changed its type toSymmetryOptimizationStrategy
. It now supports performing strong, weak and no additional symmetry optimization. -
Refactored the enum
HierarchicLayout.layoutMode
property into a booleanfromSketchMode
property and removed theLayoutMode
enum. -
The
IEdgeReverser
interface and theHierarchicLayoutCore.createEdgeReverser
method have been removed. -
The
NodeLayoutDescriptor
class of theHierarchicLayout
algorithm, which was renamed toHierarchicalLayoutNodeDescriptor
, does no longer allow to specify the border-to-port gap ratios individually for each node side. TheborderToPortGapRatio
property now defines the value for all four node sides. -
EdgeRouterBusDescriptor
is renamed toGridComponentDescriptor
. -
HierarchicLayout.BUS_DESCRIPTOR_DP_KEY
is renamed toGRID_COMPONENT_DESCRIPTOR_DATA_KEY
. -
HierarchicLayoutData.buses
is renamed togridComponents
. -
HierarchicLayoutData.busRootOffsets
is renamed togridComponentRootOffsets
. -
NodeDataType.BUS_STRUCTURE_DUMMY
is renamed toGRID_COMPONENT_BUS_NODE
. -
Replaced
INodeData
interface withHierarchicalLayoutNodeContext
class.-
Renamed
INodeData.groupId
toHierarchicalLayoutNodeContext.edgeGroupId
. -
Removed the
INodeData.parentGroupNode
property.
-
Renamed
-
Replaced
IEdgeData
interface withHierarchicalLayoutEdgeContext
class.-
IEdgeData.type
is read-only on the newHierarchicalLayoutEdgeContext
. -
The following
IEdgeData
properties now offer read and write access on the newHierarchicalLayoutEdgeContext
:sourceGroup
,targetGroup
,sourcePortGroup
,targetPortGroup
,sourcePortCandidates
,targetPortCandidates
,thickness
,crossingCost
,criticalEdgePriority
,sourcePortAlignment
,targetPortAlignment
. -
Renamed
IEdgeData.sourcePortConstraint
andtargetPortConstraint
toselectedSourcePortCandidate
andselectedTargetPortCandidate
respectively. Bot properties now offer read and write access. -
Removed the
IEdgeData.group
property.
-
-
Replaced
ILayer
interface withHierarchicalLayoutLayer
class. -
Renamed the
ILayer.list
property toHierarchicalLayoutLayer
class.Nodes
. -
Replaced
ILayers
interface with a list ofHierarchicalLayoutLayer
instances accessible viaHierarchicalLayoutContext.layers
property.-
Methods
HierarchicalLayoutContext.insertLayer
andremoveLayer
are replacements for theILayers.insert
andILayers.remove
methods.
-
Methods
-
Replaced
IItemFactory
interface withItemFactory
class. Several of the factory methods have also been removed or renamed.-
createDummyEdge
has been renamed tocreateHelperEdge
. -
CreateProxyNode
has been renamed tocreateSideProxyNode
anddestroyProxyNode
todestroySideProxyNode
. -
createSameLayerProxy
has been renamed tocreateSameLayerProxyEdge
anddestroySameLayerProxy
todestroySameLayerProxyEdge
. -
setTemporaryEdgeGroups
has been renamed tocreateGroupedEdgeContext
. -
setTemporaryCriticalEdgePriority
has been removed. -
setTemporaryCrossingCost
has been removed. -
setTemporaryEdgeThickness
has been removed. -
setTemporaryPortConstraint
has been removed.
-
-
EdgeDataType.REDIRECTED_GROUP_EDGE
has been removed. -
The
ILayoutDataProvider
interface is removed and its functionality is moved toHierarchicalLayoutContext
. -
The
ILayers
interface is moved to theHierarchicalLayoutContext
, and methods that acceptedILayers
as a parameter instead acceptHierarchicalLayoutContext
now. -
The
IItemFactory
interface is moved to theHierarchicalLayoutContext
, and methods that acceptedIItemFactory
as a parameter instead acceptHierarchicalLayoutContext
now. -
Names containing
PortBorderGap
were renamed to now containBorderToPortGapRatio
. -
Properties
HierarchicLayout.recursiveGroupLayering
andHierarchicLayout.compactGroups
are combined intoHierarchicalLayout.groupLayeringPolicy
. -
Methods
ConstraintIncrementalLayerer.checkConstraints
,GivenLayersLayerer.normalize
have been removed. -
The protected callback methods
getLayerAlignment
andassignNodesToSublayer
have been removed from theCoordinateAssigner
class (formerly calledSimplexNodePlacer
). Furthermore, itsgetMinDistance
method has been renamed togetMinimumDistance
. -
The
IDrawingDistanceCalculator.getMinDistance
method has been renamed togetMinimumDistance
. -
Renamed
NodeDataType
toHierarchicalLayoutNodeType
and its valueNormal
toHierarchicalLayoutNodeType.REGULAR
. -
Renamed
EdgeDataType
toHierarchicalLayoutEdgeType
and its valueNormal
toHierarchicalLayoutEdgeType.REGULAR
. -
Renamed
LayerType.NORMAL
toHierarchicalLayoutLayerType.REGULAR
. -
Renamed
MergingPolicy
toLayerMergingPolicy
. -
Renamed
RankingPolicy
toLayerRerankingPolicy
andTopologicalLayerer.rankingPolicy
torerankingPolicy
. -
Renamed
WeightHeuristic
toSequencerWeightHeuristic
. -
The
HierarchicLayout.orthogonalRouting
property has been removed. To specify orthogonal or other routing styles, the routing style on theHierarchicalLayoutEdgeDescriptor
must be used instead. -
IPortConstraintOptimizer
has been renamed toIPortCandidateSelector
, and its methods have been renamed fromoptimizeAfterLayering
andoptimizeAfterSequencingForSingleNode
toselectAfterLayering
andIPortCandidateSelector.selectAfterSequencing
. -
PortConstraintOptimizerBase
has been removed. -
PortCandidateOptimizer
has been renamed toPortCandidateSelector
and its properties have been renamed:backLoopPenalty
tobackLoopCost
,crossingPenalty
tocrossingCost
, andoverUsagePenalty
tooverUsageCost
. -
The
IPortCandidateMatcher
interface has been removed. For an advanced customization of the port selection consider implementing a customIPortCandidateSelector
. -
The
INodePlacer
interface of the hierarchic layout has been renamed toICoordinateAssigner
. Its implementation has been renamed fromSimplexNodePlacer
toCoordinateAssigner
. -
The
HierarchicLayout.separateLayers
property has been moved toCoordinateAssigner.separateLayers
, since it has always only worked when using that implementation. -
The
groupTransposition
property has been removed fromDefaultLayerSequencer
class. The Transposition property should now be used for groups too. -
The
TypeBasedDrawingDistanceCalculator
class has been removed. -
The classes
ILayeredComponentsMerger
andDefaultLayeredComponentsMerger
have been removed. The functionality is integrated into theMultiComponentLayerer
, which now offers a newmergingPolicy
property and protected methodmerge
for the case that a custom merging approach is required. -
The
HierarchicLayoutCore
class is not a standalone layout algorithm anymore but now offers only access to more advanced features of theHierarchicLayout
class.-
All public data keys were moved to the
HierarchicLayout
class. - 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.selfLoopCalculatorData
was removed. Settings like minimum lengths for self-loop edges are specified via theHierarchicalLayoutEdgeDescriptor
class like for normal edges. -
The
SelfLoopCalculator
andSelfLoopCalculatorData
classes was removed from the API. -
The protected methods
DefaultPortAllocator.getPortBorderGap
,DefaultPortAllocator.getPortBorderGapRatio
, andDefaultPortAllocator.getPortDistanceDelta
were removed. -
Removed members
HierarchicLayout.createLayerConstraintFactory
,HierarchicLayoutData.layerConstraintFactory
,HierarchicLayout.createSequenceConstraintFactory
andHierarchicLayoutData.sequenceConstraintFactory
. The factories are no longer required to define layering and sequence constraints.-
The recommended way is to use properties
HierarchicLayoutData.layerConstraints
andHierarchicLayoutData.sequenceConstraints
. -
For expert uses cases (e.g. algorithm customization), the low-level helper classes
LayoutGraphLayerConstraints
andLayoutGraphSequenceConstraints
were added.
-
The recommended way is to use properties
-
Removed the keys
HierarchicLayout.LAYER_CONSTRAINTS_MEMENTO_DP_KEY
andHierarchicLayout.SEQUENCE_CONSTRAINTS_MEMENTO_DP_KEY
. -
Class
TopLevelGroupToSwimlaneStage
has been removed from the library. -
The obsolete extension methods
createLayerConstraintFactory
andcreateSequenceConstraintFactory
have been removed fromHierarchicLayout
. To specify layer and sequence constraints, useLayoutData
instead.
Incompatible Behavior Changes
-
The
HierarchicalLayout
now considers node labels by default. -
The
HierarchicalLayout
now places edge labels by default using an integrated labeling algorithm. -
Changed the default edge routing style of the
HierarchicalLayout
class from Polyline to Orthogonal.
See the related new features.
Tree Layout
Incompatible API Changes
-
The
TreeLayout.graph
field has been removed. For customizations in theTreeLayout
the graph is available whatsoever and can if required be queried from the node/edge items.-
Method
TreeLayout.layoutRoot
now has an additional parameter of typeLayoutGraph
as its first argument.
-
Method
-
The
GridNodePlacer.automaticRowAssignment
property (now renamed toMultiLayerSubtreePlacer
) was removed. The layers are now always automatically assigned if no layer indices are defined viaTreeLayoutData.multiLayerSubtreePlacerLayerIndices
. -
Removed the
LayeredNodePlacer.id
property (class was also renamed toLevelAlignedSubtreePlacer
). The ID can still be provided via the constructor. Reading it later should never be necessary. -
Renamed
ConnectorDirection
toSubtreeConnectorDirection
, and the valuesNorth
toSubtreeConnectorDirection.UP
,East
toSubtreeConnectorDirection.RIGHT
,South
toSubtreeConnectorDirection.DOWN
, andWest
toSubtreeConnectorDirection.LEFT
. -
Renamed the values of
ParentConnectorDirection
:North
toParentConnectorDirection.UP
,East
toParentConnectorDirection.RIGHT
,South
toParentConnectorDirection.DOWN
, andWest
toParentConnectorDirection.LEFT
. -
Renamed
IProcessor
toISubtreePlacerProcessor
. -
DelegatingNodePlacer
now implementsISubtreePlacer
instead ofIFromSketchNodePlacer
. -
BusNodePlacer
now implementsISubtreePlacer
instead ofIFromSketchNodePlacer
. -
Replaced
RotatableNodePlacerMatrix
with theSubtreeTransform
enum and renamed constants:-
RotatableNodePlacerMatrix.DEFAULT
toSubtreeTransform.NONE
. -
RotatableNodePlacerMatrix.MIR_HOR
toSubtreeTransform.FLIP_Y
. -
RotatableNodePlacerMatrix.MIR_VERT
toSubtreeTransform.FLIP_X
. -
RotatableNodePlacerMatrix.ROT90
toSubtreeTransform.ROTATE_LEFT
. -
RotatableNodePlacerMatrix.ROT180
toSubtreeTransform.ROTATE_180
. -
RotatableNodePlacerMatrix.ROT270
toSubtreeTransform.ROTATE_RIGHT
. -
RotatableNodePlacerMatrix.MIR_VERT_ROT90
toSubtreeTransform.ROTATE_RIGHT_FLIP_Y
. -
RotatableNodePlacerMatrix.MIR_HOR_ROT90
toSubtreeTransform.ROTATE_LEFT_FLIP_Y
.
-
-
Renamed "NodePlacer" to "SubtreePlacer" in the following types and members:
-
Renamed the
DefaultNodePlacer
class toSingleLayerSubtreePlacer
. -
Renamed the
DelegatingNodePlacer
class toSingleSplitSubtreePlacer
. -
Renamed the
DoubleLineNodePlacer
class toDoubleLayerSubtreePlacer
. -
Renamed the
FreeNodePlacer
class toFixedSubtreePlacer
. -
Renamed the
GridNodePlacer
class toMultiLayerSubtreePlacer
. -
Renamed the
GroupedNodePlacer
class toMultiSplitSubtreePlacer
. The class now considers port grouping (useTreeLayoutData.ports
) to define how child nodes are split. -
Renamed the
LayeredNodePlacer
class toLevelAlignedSubtreePlacer
. -
Renamed the
TreeLayout.defaultNodePlacer
property todefaultSubtreePlacer
. -
Renamed the
TreeLayoutData.delegatingNodePlacerPrimaryNodes
property tosingleSplitSubtreePlacerPrimaryNodes
. -
Renamed the
TreeLayoutData.gridNodePlacerRowIndices
property tomultiLayerSubtreePlacerLayerIndices
.
-
Renamed the
-
Renamed the property
RoutingStyle.Polyline
toSingleLayerSubtreePlacerRoutingStyle.STRAIGHT_LINE_TO_CHILD_CONNECTOR
,RoutingStyle.FORK
property toSingleLayerSubtreePlacerRoutingStyle.ORTHOGONAL
, andRoutingStyle.FORK_AT_ROOT
property toSingleLayerSubtreePlacerRoutingStyle.ORTHOGONAL_AT_ROOT
. -
Added
SingleLayerSubtreePlacerRoutingStyle.POLYLINE
property which leads to a polyline routing style. -
Removed the
TreeLayout.defaultLeafPlacer
property as well asLeafNodePlacer
class. -
Removed the
SimpleNodePlacer
class; usedefaultSubtreePlacer
class instead. -
Replaced
DefaultNodePlacer.childPlacement
property with the newSingleLayerSubtreePlacer.transformation
property. The formerChildPlacement.HORIZONTAL_DOWNWARD
value now maps toSubtreeTransform.NONE
,ChildPlacement.HORIZONTAL_UPWARD
toSubtreeTransform.FLIP_Y
,ChildPlacement.VERTICAL_TO_LEFT
toSubtreeTransform.ROTATE_RIGHT
, andChildPlacement.VERTICAL_TO_RIGHT
toSubtreeTransform.ROTATE_LEFT_FLIP_Y
. -
Renamed
RootNodeAlignment.CENTER_OVER_CHILDREN
toSubtreeRootAlignment.CENTER_OF_CHILDREN
. -
Renamed
RootNodeAlignment.LEADING
toSubtreeRootAlignment.LEFT
,RootNodeAlignment.TRAILING
toSubtreeRootAlignment.RIGHT
,RootAlignment.LEADING_OFFSET
toSubtreeRootAlignment.LEADING
, andRootAlignment.TRAILING_OFFSET
toSubtreeRootAlignment.TRAILING
. -
Renamed
IPortAssignment
toITreeLayoutPortAssigner
. -
Renamed
DefaultPortAssignment
toTreeLayoutPortAssigner
. -
Renamed
TreeLayout.PORT_ASSIGNMENT_DP_KEY
toPORT_ASSIGNER_DATA_KEY
. -
Renamed
TreeLayoutData.portAssignments
toportAssigners
. -
Removed the
NodePlacerBase
class. ImplementISubtreePlacer
interface instead. -
Removed the method
PlaceSubtree
(LayoutNode
,ParentConnectorDirection
) of former subclasses ofNodePlacerBase
class. OverrideplaceSubtree
method(IMapper
<Node,SubtreeShape
>,IMapper
<Node,SubtreeShape
>,LayoutGraph
, Node) instead. -
Removed the
determineChildConnector
method of former subclasses ofNodePlacerBase
class. OverridedetermineChildConnectors
method instead. -
Removed the methods
getNodeShape
andgetSubtreeShape
from former subclasses ofNodePlacerBase
class. - Renamed all types, methods and properties containing "NodePlacer" to "SubtreePlacer".
-
Renamed
TreeLayout.multiParentAllowed
toallowMultiParent
. -
Renamed
TreeReductionStage.multiParentAllowed
toallowMultiParent
. -
The
TreeReductionStage.nonTreeEdgeLabelingAlgorithm
property has been renamed tononTreeEdgeLabeling
. -
Remove methods
getPortBorderGap
andgetPortDistanceDelta
from theDefaultPortAssignment
(renamed toTreeLayoutPortAssigner
) class. -
The
DefaultPortAssignment.borderGapToPortGapRatio
property was renamed toborderToPortGapRatio
. -
TreeLayoutPortAssignmentMode
valuePortConstraint
has been removed. Port candidates are always considered if they are specified. -
TreeLayoutPortAssignmentMode
valuesDISTRIBUTED_EAST
,DISTRIBUTED_WEST
,DISTRIBUTED_NORTH
,DISTRIBUTED_SOUTH
have been replaced by valueDISTRIBUTED
. The side can be specified by usingTreeLayoutData.ports
. -
Tree.PortAssignmentMode.None
has been renamedTree.PortAssignmentMode.Center
. -
TreeLayout.getPortAssignment
can no longer be overridden. To specifyIPortAssignment
strategies per node,TreeLayoutData.portAssigners
can be used. -
TreeLayout.getNodePlacer
can no longer be overridden. To specifynodePlacer
strategies per node,TreeLayoutData.subtreePlacers
can be used. -
The following methods of
TreeLayout
have been removed:-
ReverseEdges
. -
getRootsArray
. -
getOutEdgeComparer
-TreeLayoutData.childOrder
can be used instead. -
createNodeShape
-modifyNodeShape
can be used instead to modify the shape. -
directTree
-TreeLayoutData.treeRoot
can be used to accomplish the same result.
-
-
DefaultNodePlacer.calculateParentConnector
has been removed. Custom implementations can be inlined at the end ofplaceSubtree
. -
SubtreeShape.addBoundsToShape
accepts a singleRect
parameter instead of its deconstructed values. -
SubtreeShape.assignValuesTo
has been removed -createCopy
can be used instead. -
Renamed
FillStyle
toAspectRatioChildAlignmentPolicy
andAspectRatioNodePlacer.fillStyle
toChildAlignmentPolicy
. -
The API of the node placer implementations has been simplified and improved. The
INodePlacer
interface 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.sourcePortConstraintDataAcceptor
andTreeLayout.targetPortConstraintDataAcceptor
have been removed. -
The properties
TreeLayout.sourceGroupDataAcceptor
andTreeLayout.targetGroupDataAcceptor
have been removed. -
The
TreeComponentLayout
class has been removed. -
The factory
TreeReductionStage.createStraightLineRouter
method has been removed. The standalone routerStraightLineEdgeRouter
class should be used instead when straight-line edges are required. -
The
AspectRatioTreeLayout
has been removed together withAspectRatioTreeLayoutData
,RootPlacement
, andSubtreeArrangement
. Use theTreeLayout
with theAspectRatioSubtreePlacer
instead. -
The
ClassicTreeLayout
has been removed together with the enumsLeafPlacement
,EdgeRoutingStyle
, andPortStyle
. TheTreeLayout
can be used instead. -
Renamed
TreeLayoutData.outEdgeComparers
toTreeLayoutData.childOrder
and changed the types to Comparison function. -
Removed
TreeLayout.defaultOutEdgeComparer
. UseTreeLayoutData.childOrder
instead. Also removedNodeOrderComparer
class. -
All layouts suitable for trees, such as
TreeLayout
,RadialTreeLayout
, now default to using theTreeReductionStage
to temporarily remove non-tree edges from the graph during layout calculation. -
Replaced
TreeLayoutData.outEdgeComparers
property with new, more powerfulchildOrder
property.
Incompatible Behavior Changes
-
The
TreeLayout
now considers node labels by default. -
The
TreeLayout
now places edge labels by default using an integrated labeling algorithm. - Port candidates are always considered if they are specified.
See the related new features.
Orthogonal Layout
Incompatible API Changes
-
Renamed
ChainLayoutStyle
toOrthogonalLayoutChainSubstructureStyle
. -
Renamed
CycleLayoutStyle
toOrthogonalLayoutCycleSubstructureStyle
. -
Renamed
TreeLayoutStyle
toOrthogonalLayoutTreeSubstructureStyle
. -
Renamed
EdgeLayoutDescriptor
toOrthogonalLayoutEdgeDescriptor
. -
Renamed
OrthogonalLayout.edgeLayoutDescriptor
todefaultEdgeDescriptor
. -
Renamed
OrthogonalLayout.EDGE_LAYOUT_DESCRIPTOR_DP_KEY
toEDGE_DESCRIPTOR_DATA_KEY
. -
Renamed
OrthogonalLayoutData.edgeLayoutDescriptors
toedgeDescriptors
. -
The
LayoutStyle
enum (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
OrthogonalLayout
properties related to substructures have all been renamed to contain "substructure" in their name.chainStyle
,chainSize
,treeStyle
,treeSize
,treeOrientation
,cycleStyle
,cycleSize
are now calledOrthogonalLayoutChainSubstructureStyle
,chainSubstructureSize
,OrthogonalLayoutTreeSubstructureStyle
,treeSubstructureSize
,treeSubstructureOrientation
,OrthogonalLayoutCycleSubstructureStyle
,cycleSubstructureSize
. -
The following properties have been removed from the
OrthogonalLayout
class: Randomization,crossingReduction
,edgeLengthReduction
,optimizePerceivedBends
andfaceMaximization
. Use the newqualityTimeRatio
property instead. -
The
DirectedEdges
properties ofOrthogonalLayoutData
andPartialLayoutData
are now both of typeItemMapping
with the nameedgeOrientation
and support floating-point values to also specify edges oriented against the main layout direction. -
EdgeDirectednessDpKey
on all supportingILayoutAlgorithm
s have been combined into a global data keyLayoutKeys.EDGE_DIRECTEDNESS_DATA_KEY
. -
PartialLayout.DIRECTED_EDGES_DP_KEY
is renamed toEDGE_ORIENTATION_DATA_KEY
and now also allows specifying edges should be routed against the main layout orientation. -
Removed the
CompactOrthogonalLayout
class.
Incompatible Behavior Changes
-
The
OrthogonalLayout
now considers node labels by default. -
The
OrthogonalLayout
now places edge labels by default using an integrated labeling algorithm.
See the related new features.
Edge Router
Incompatible API Changes
-
The
monotonicPathRestriction
enum is now a flags enum and is calledMonotonicPathRestrictions
. -
The
SelfLoopRouter.smartSelfLoopPlacement
property 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, theSelfLoopRouter
can be applied in a separate post-processing step where only self-loops are present in the graph (useSubgraphLayoutStage
). -
The
ParallelEdgeRouter.absJoinEndDistance
property has been renamed toabsoluteJoinEndDistance
. -
The
ParallelEdgeRouter.relJoinEndDistance
property has been renamed torelativeJoinEndDistanceFactor
, and its default value now is 0. -
The
ParallelEdgeRouter.lineDistance
property has been renamed toedgeDistance
. -
The
SelfLoopRouter.lineDistance
property has been renamed toedgeDistance
. -
The type of
intermediateRoutingPoints
property has been changed fromIList
toIEnumerable
. -
Renamed
ParallelEdgeRouter.ROUTED_PARALLEL_EDGES_DP_KEY
toROUTED_MULTI_EDGES_RESULT_DATA_KEY
. -
Renamed
ParallelEdgeRouter.findAndHideParallelEdges
tofindAndHideMultiEdges
. -
Renamed
ParallelEdgeRouterData.routedParallelEdges
toroutedMultiEdgesResult
. -
Renamed the
CurveEdgeLayoutDescriptor.minimumEdgeToEdgeDistance
property tominimumEdgeDistance
. -
Renamed the
EdgeLayoutDescriptor.minimumEdgeToEdgeDistance
property (EdgeRouter
) tominimumEdgeDistance
. -
Renamed the
PenaltySettings.minimumEdgeToEdgeDistancePenalty
property toEdgeRouterCosts.minimumEdgeDistanceCost
. -
EdgeRouter.grid
has been replaced byEdgeRouter.gridSpacing
. -
The class
Grid
has been removed. -
Renamed
EdgeLayoutDescriptor
toEdgeRouterEdgeDescriptor
. -
Renamed
CurveEdgeLayoutDescriptor
toCurveRoutingEdgeDescriptor
. -
Renamed
EdgeRouter.EDGE_LAYOUT_DESCRIPTOR_DP_KEY
toEDGE_DESCRIPTOR_DATA_KEY
. -
Renamed
EdgeRouter.defaultEdgeLayoutDescriptor
todefaultEdgeDescriptor
. -
Renamed
EdgeRouter.getEdgeLayoutDescriptor
togetEdgeDescriptor
. -
Renamed
EdgeRouterData.edgeLayoutDescriptors
toedgeDescriptors
. -
Renamed
PathSearchContext.currentEdgeLayoutDescriptor
tocurrentEdgeDescriptor
. -
Renamed
CurveRoutingStage.defaultEdgeLayoutDescriptor
todefaultEdgeDescriptor
. -
Renamed
CurveRoutingStage.CURVE_EDGE_LAYOUT_DESCRIPTOR_DP_KEY
toEDGE_DESCRIPTOR_DATA_KEY
. -
Renamed
CurveRoutingStageData.edgeLayoutDescriptors
toedgeDescriptors
. -
Renamed
Interval.min
toInterval.minimum
. -
Renamed
Interval.max
toInterval.maximum
. -
Renamed
OrthogonalInterval.min
toOrthogonalInterval.minimum
. -
Renamed
OrthogonalInterval.max
toOrthogonalInterval.maximum
. -
Renamed
PenaltySettings
toEdgeRouterCosts
.-
Renamed the related
EdgeLayoutDescriptor.penaltySettings
property toEdgeRouterCosts
. -
Renamed all its properties to
XyzCost
instead ofXyzPenalty
:sketchViolationPenalty
tosketchViolationCost
,edgeLengthPenalty
toedgeLengthCost
,bendPenalty
tobendCost
,edgeCrossingPenalty
toedgeCrossingCost
,adjacentEdgeCrossingPenalty
toadjacentEdgeCrossingCost
,selfCrossingPenalty
toselfCrossingCost
,nodeCrossingPenalty
tonodeCrossingCost
,portCrossingPenalty
toportCrossingCost
,groupNodeCrossingPenalty
togroupNodeCrossingCost
,nodeLabelCrossingPenalty
tonodeLabelCrossingCost
,edgeLabelCrossingPenalty
toedgeLabelCrossingCost
,minimumNodeToEdgeDistancePenalty
tominimumNodeToEdgeDistanceCost
,minimumGroupNodeToEdgeDistancePenalty
tominimumGroupNodeToEdgeDistanceCost
,minimumEdgeToEdgeDistancePenalty
tominimumEdgeDistanceCost
,minimumNodeCornerDistancePenalty
tominimumNodeCornerDistanceCost
,minimumFirstLastSegmentLengthPenalty
tominimumFirstLastSegmentLengthCost
,bendsInNodeToEdgeDistancePenalty
tobendsInNodeToEdgeDistanceCost
,monotonyViolationPenalty
tomonotonyViolationCost
,partitionGridCellReentrancePenalty
tolayoutGridCellReentranceCost
,portViolationPenalty
toportViolationCost
,invalidEdgeGroupingPenalty
toinvalidEdgeGroupingCost
, andsingleSideSelfLoopPenalty
tosingleSideSelfLoopCost
.
-
Renamed the related
-
Renamed and moved data key
PartitionCellKeys.NODE_LABEL_CROSSING_COST_FACTORS_KEY
toEdgeRouter.NODE_LABEL_CROSSING_COST_FACTOR_DATA_KEY
. -
Renamed and moved data key
PartitionCellKeys.EDGE_LABEL_CROSSING_COST_FACTORS_KEY
toEdgeRouter.EDGE_LABEL_CROSSING_COST_FACTOR_DATA_KEY
. -
Property
EdgeRouterData.labelCrossingPenaltyFactors
has been replaced by the two new propertiesEdgeRouterData.nodeLabelCrossingCostFactors
andEdgeRouterData.edgeLabelCrossingCostFactors
. -
The
SelfLoopRouter.layoutSelfLoops
method has been removed. To route the self-loop edges, theSelfLoopRouter
class should be applied to the graph. -
The
SelfLoopRouter.layoutStyle
property has been renamed toSeriesParallelLayoutRoutingStyle
. The respective enum type has been renamed toSelfLoopRoutingStyle
. -
The
OrganicEdgeRouter.createNodeEnlargementStage
method has been removed and is now replaced by the newallowMovingNodes
property. -
The
OrganicEdgeRouter.edgeNodeOverlapAllowed
property has been renamed toOrganicEdgeRouter.allowEdgeNodeOverlaps
. -
The protected
EdgeRouter.createDefaultEdgeOrderComparer
method has been removed. UseEdgeRouterData.edgeProcessingComparator
instead. -
Renamed
Obstacle
toRoutingObstacle
. -
Renamed
Path
toPathSearchResult
. -
Renamed
PathRequest
toPathSearchRequest
. -
Refactored the API for customizing the
EdgeRouter
class.-
The classes/interfaces
PathSearch
,PathSearchResult
,CellSegmentInfo
,EdgeInfo
, Channel,ChannelBasedPathRouting
,SegmentInfo
,SegmentInfoBase
,SegmentGroup
,Alignment
,DynamicObstacleDecomposition
,IObstaclePartition
,IPartition
,GraphPartition
,GraphPartitionExtensionAdapter
,IDecompositionListener
,IDynamicDecomposition
,IEnterIntervalCalculator
andIGraphPartitionExtension
have been removed. -
The
PartitionCell.createBorderInterval
method has been removed alongside with thePartitionCellBorder
enum. -
The properties
EdgeCellInfo.enterSegmentGroup
,EdgeCellInfo.exitSegmentGroup
andEdgeCellInfo.cellSegmentInfos
have been removed. -
The properties
EdgeRouter.registeredPartitionExtensions
,registeredPathSearchExtensions
and Partition have been removed, as well as methodscreateObstacleDecomposition
,createPathSearch
,createPathSearchContext
,configurePathSearch
,createPathRouting
,createConfiguration
,configureGraphPartition
andcleanUpGraphPartition
. -
The properties
PathSearchContext.pathSearch
andPathSearchContext.pathSearchResult
have been removed. -
Added new methods
EdgeRouter.addPathSearchExtension
andEdgeRouter.addPartitionExtension
. -
Added
PartitionExtension
class as replacement forIGraphPartitionExtension
. -
Added new
IRouterPartition
interface as replacement ofIObstaclePartition
andIPartition
. -
The Partition property has been added to
PathSearchConfiguration
class. -
The
Path.length
property has been renamed toPathSearchResult.cellEntranceCount
.
-
The classes/interfaces
-
The
PolylineLayoutStage
class has been renamed toOctilinearRoutingStage
. ItspreferredPolylineSegmentLength
property has been renamed topreferredOctilinearSegmentLength
. -
The
EdgeRouter.ignoreInnerNodeLabels
property 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.preferredPolylineSegmentLength
andEdgeRouter.maximumPolylineSegmentRatio
have been removed. They are replaced by respective properties on theEdgeRouterEdgeDescriptor
class. -
Replaced
EdgeRouter.edgeComparer
property of typeIComparer
withEdgeRouterData.edgeProcessingComparator
of type Comparison function. -
Class
PenaltySettings
andEdgeLayoutDescriptor.penaltySettings
property where renamed toEdgeRouterCosts
andEdgeRouterEdgeDescriptor.edgeRouterCosts
. -
The
BusRouter
class and all API members related to it have been removed. For bus-style edge routing, useEdgeRouter
instead. -
Method
ParallelEdgeRouter.layoutParallelEdges
was renamed torouteEdges
.
Incompatible Behavior Changes
-
The default of
ParallelEdgeRouter.relativeJoinEndDistanceFactor
has changed from 0.1 to 0. -
The
EdgeRouter
now considers node labels by default. -
The
EdgeRouter
now places edge labels by default using a generic labeling algorithm.
See the related new features.
Labeling
Incompatible API Changes
-
Removed the
GraphModelManager.labelLayerPolicy
property. Use the more specific propertiesnodeLabelLayerPolicy
,edgeLabelLayerPolicy
andportLabelLayerPolicy
instead. -
The
SandwichLabelModel
has been removed. It can be emulated using aCompositeLabelModel
with the top and bottom position of anExteriorNodeLabelModel
. -
Made enums
LabelAngleOnRightSideRotations
andLabelAngleReferences
non-flags enums. -
Removed the
LabelAngleOnRightSideOffsets
enum. -
Changed
EdgeLabelPreferredPlacement.AngleOffsetOnRightSide
property to a booladdHalfRotationOnRightSide
property. -
Removed the interfaces
INodeLabelLayout
andIEdgeLabelLayout
. Labels of theLayoutGraph
are instead represented by typesLayoutNodeLabel
andLayoutEdgeLabel
. -
Removed
LayoutGraph.getLabelLayout
. Labels can instead be retrieved usingLayoutNode.labels
andLayoutEdge.labels
. -
Removed the
ILabelLayoutFactory
class. Labels can instead be created and removed usingLayoutGraph.addLabel
andLayoutGraph.remove
. -
Removed the interfaces
INodeLabelLayoutModel
,IEdgeLabelLayoutModel
and all implementations. To specify valid positions forGenericLabeling
, the typesNodeLabelCandidates
andEdgeLabelCandidates
offer methods for creating positions that correspond to the old model implementations. Candidates can be specified usingGenericLabelingData.nodeLabelCandidates
andGenericLabelingData.edgeLabelCandidates
. -
Summarized layout algorithm properties such as
ConsiderNodeLabels
,ConsiderEdgeLabels
,integratedNodeLabeling
,integratedEdgeLabeling
, andNodeLabelingPolicy
as two propertiesNodeLabelPlacement
andEdgeLabelPlacement
. -
Removed
LabelLayoutTranslator
,LabelLayoutData
,LabelLayoutKeys
and related classes. The behavior ofLabelLayoutData
can be recreated usingLayoutNodeLabel.absolutePlacement
andLayoutEdgeLabel.absolutePlacement
. -
Removed properties
removeNodeOverlaps
,removeEdgeOverlaps
andedgeGroupOverlapAllowed
fromGenericLabeling
. -
Introduced
GenericLabeling.qualityTimeRatio
property providing the possibility of balancing runtime and quality. -
Added intersection information to
LabelCandidate
class, which provides means to compute profits and to mimic the behavior of the removed properties. -
Removed
GenericLabeling.optimizationStrategy
. UseGenericLabeling.defaultNodeLabelingCosts
andGenericLabeling.defaultEdgeLabelingCosts
instead. Additionally individual costs can now be set for each label, usingGenericLabelingData.nodeLabelingCosts
andGenericLabelingData.edgeLabelingCosts
. -
Removed
GenericLabeling.autoFlipping
. Automatically flipping labels right-side up is handled by the view, e.g.SmartEdgeLabelModel.autoRotation
. -
Removed the
IProfitModel
interface and propertiesGenericLabeling.profitModel
andGenericLabeling.customProfitModelRatio
. Custom weights for a label candidate can be set at creation of the candidate withNodeLabelCandidates
andEdgeLabelCandidates
, or through a callback for each label usingGenericLabelingData.nodeLabelCandidateProcessors
andGenericLabelingData.edgeLabelCandidateProcessors
. -
Removed the classes
MISLabelingBase
andLabelingBase
. -
Removed the following protected methods from
GenericLabeling
:createEdges
,assignProfit
,foundLabelOverlap
,foundNodeOverlap
,foundEdgeOverlap
,foundHaloOverlap
,foundPartitionGridLineOverlap
,foundPartitionGridInsetOverlap
,foundPartitionGridInteriorOverlap
. -
Renamed
LabelSideReferences.ABSOLUTE_WITH_LEFT_IN_NORTH
toABSOLUTE_WITH_LEFT_ABOVE
. -
Renamed
LabelSideReferences.ABSOLUTE_WITH_RIGHT_IN_NORTH
toABSOLUTE_WITH_RIGHT_ABOVE
. -
Values of
DiscreteNodeLabelPositions
enum have been renamed.-
INTERNAL_MASK
toINSIDE
. -
EIGHT_POS_MASK
toDiscreteNodeLabelPositions.OUTSIDE
. -
SIDES_MASK
toSIDES
. -
CORNER_MASK
toRectangleCorners
. -
Removed value
SANDWICH_MASK
.
-
-
Values of
DiscreteNodeLabelPositions
have 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.customProfit
to Weight. -
Renamed
SliderMode
toEdgeLabelSliderMode
. -
The configuration
LabelingData
class for theGenericLabeling
algorithm has been renamed toGenericLabelingData
to be more in line with otherLayoutData
implementations. -
Removed
DescriptorWrapperLabelModel
. -
ILabelCandidateDescriptor
and related interfaces have been removed. -
LayoutGraphAdapter
: removedgetLabelCandidateDescriptorProvider
andgetLabelCandidateDescriptor
. -
MISLabelingBase.reduceAmbiguity
is removed. Ambiguous label placements can instead be penalized usingLabelingCosts.ambiguousPlacementCost
. -
The
PreferredPlacementDescriptor
class has been renamed toEdgeLabelPreferredPlacement
.-
IEdgeLabelLayout.The
property.PreferredPlacementDescriptor
has been removed. Instead the preferred placement can be specified usingEdgeLabelPreferredPlacement.EDGE_LABEL_PREFERRED_PLACEMENT_DATA_KEY
.
-
Organic Layout
Incompatible API Changes
-
The
OutputRestriction
class and the associated properties have been renamed toShapeConstraint
. -
OrganicConstraintData
no longer inherits fromLayoutData
. -
Renamed
OrganicLayoutData.sourceGroupIds
tosubstructureSourceGroupIds
.OrganicLayout
now usesOrganicLayout.SUBSTRUCTURE_SOURCE_GROUP_ID_DATA_KEY
instead ofLayoutKeys.SOURCE_EDGE_GROUP_ID_DATA_KEY
. -
Renamed
OrganicLayoutData.targetGroupIds
tosubstructureTargetGroupIds
.OrganicLayout
now usesOrganicLayout.SUBSTRUCTURE_TARGET_GROUP_ID_DATA_KEY
instead ofLayoutKeys.TARGET_EDGE_GROUP_ID_DATA_KEY
. -
Renamed the
OrganicLayout.GROUP_NODE_MODE_DP_KEY
property toGROUP_NODE_HANDLING_POLICY_DATA_KEY
. -
OrganicLayoutTreeSubstructureStyle.BALLOON
has been renamed toRADIAL_TREE
. -
The
OrganicLayout
now configures theComponentLayout
by default, andsmartComponentLayout
was removed. -
OrganicLayout.configureComponentLayout
anddisposeComponentLayout
were removed. To configure theComponentLayout
, replace the instance of theComponentLayout
in theLayoutStageStack
with a suitably configured instance. -
OrganicLayout.considerNodeSizes
was removed. TheOrganicLayout
now always considers node sizes. -
Renamed
OrganicLayout.clusterAsGroupSubstructureAllowed
toallowClusterAsGroupSubstructure
. -
Renamed
OrganicLayout.nodeEdgeOverlapAvoided
toavoidNodeEdgeOverlap
. -
Renamed
OrganicLayout.nodeOverlapsAllowed
toallowNodeOverlaps
. -
Renamed
GroupNodeMode.NORMAL
toGroupNodeHandlingPolicy.FREE
. -
The
OrganicLayout
class no longer offers valueOrganicLayoutClusteringPolicy.USER_DEFINED
. Now, cluster IDs provided by users viaOrganicLayoutData.clusterIds
property or data keyOrganicLayout.CLUSTER_ID_DATA_KEY
are always considered first. If none are defined, the specifiedOrganicLayout.clusteringPolicy
is considered. -
Removed the
clusterNodes
property fromOrganicLayout
. It is replaced byOrganicLayoutClusteringPolicy
property. To disable the clustering, specifyOrganicLayoutClusteringPolicy.NONE
. To enable it choose one of the available other policies. -
Removed the
clusteringQuality
property fromOrganicLayout
. UsequalityTimeRatio
instead. -
The
ClassicOrganicLayout
class has been removed. It is superseded by the more powerfulOrganicLayout
algorithm that should be used instead. -
The classes
OrganicRemoveOverlapsStage
andShuffleLayout
have been removed from the library. To solve the task of overlap removal, theRemoveOverlapsStage
class is still available and the style previously generated byOrganicRemoveOverlapsStage
can be triggered via the policyOverlapRemovalPolicy.PRESERVE_RELATIVE_LOCATIONS
. -
Removed
OrganicLayoutConstraintFactory
andOrganicLayout.createConstraintFactory
. UseOrganicLayoutData.constraints
instead. -
OrganicConstraintData.addFloatingBoundingBox
now acceptsSize
its deconstructed values. -
OrganicConstraintData.addFloatingBoundingBox
now acceptsRect
its deconstructed values. -
The
RecursiveShuffleLayout
class has been removed from the API. -
The
OrganicPartitionGridLayoutStage
class has been removed.
Incompatible Behavior Changes
-
The default style of the
OrganicLayout
'sComponentLayout
is changed toPACKED_CIRCLE
. -
The
OrganicLayout
now considers node labels by default. -
The
OrganicLayout
now places edge labels by default using a generic labeling algorithm. -
The
OrganicLayout
now always considers node sizes.
See the related new features.
Interactive Organic Layout
Incompatible API Changes
-
The
InteractiveOrganicLayout
algorithm no longer implements theILayoutAlgorithm
interface. -
The
InteractiveOrganicLayoutExecutionContext
has been removed. Call directlyInteractiveOrganicLayout
.startLayout
to start the layout calculation. -
The
InteractiveOrganicLayout
.stop method has been renamed toInteractiveOrganicLayout
.stopLayout
. -
The methods
InteractiveOrganicLayout
.applyLayout
,InteractiveOrganicLayout.stopAndWait
,InteractiveOrganicLayout.cancelAndWait
have been removed. -
The
InteractiveOrganicLayoutData
class has been added. It handles the initial settings per node and edge. -
The classes
InteractiveOrganicNodeHandle
andInteractiveOrganicEdgeHandle
have been added. They handle the settings per node and edge while the algorithm runs. -
The properties, getters, and setters on
InteractiveOrganicLayout
that concern settings for individual items have been moved toInteractiveOrganicLayoutData
or the handles as appropriate. -
The
InteractiveOrganicLayout.addStructureUpdate
method has been removed. -
The methods
InteractiveOrganicLayout.commitPositions
andcommitPositionsSmoothly
have been combined as theInteractiveOrganicLayoutData.updateNodeCenters
method. -
The
InteractiveOrganicLayout.outputRestriction
property has been renamed toShapeConstraint
. -
The
InteractiveOrganicLayout.preferredEdgeLength
property has been renamed todefaultPreferredEdgeLength
. -
The
InteractiveOrganicLayout.syncStructure
method has been removed.
See the related new features.
Circular Layout
Incompatible API Changes
-
Renamed the
ExteriorEdgeLayoutDescriptor.edgeToEdgeDistance
property toCircularLayoutExteriorEdgeDescriptor.edgeDistance
. -
Renamed
EdgeLayoutDescriptor
toCircularLayoutEdgeDescriptor
. -
Renamed
CircularLayout.defaultEdgeLayoutDescriptor
toedgeDescriptor
. -
Renamed
ExteriorEdgeLayoutDescriptor
toCircularLayoutExteriorEdgeDescriptor
. -
Renamed
CircularLayout.exteriorEdgeLayoutDescriptor
toexteriorEdgeDescriptor
. -
The
SingleCycleLayout
has been removed. TheCircularLayout
withCircularLayoutPartitioningPolicy
set toSINGLE_CYCLE
can be used instead. -
CircularLayout.singleCycleLayout
has been replaced byCircularLayout.partitionDescriptor
. -
CircularLayout.defaultEdgeLayoutDescriptor
has been renamed toedgeDescriptor
. -
CircularLayout.balloonLayout
has been renamed tobackboneLayout
. -
The
CircularLayout.layoutStyle
property has been renamed toCircularLayoutPartitioningPolicy
to 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.exteriorEdges
property instead. -
Renamed
CircularLayout.layoutStyle
toCircularLayout.partitioningPolicy
. -
Renamed
LayoutStyle
toCircularLayoutPartitioningPolicy
. -
Removed the enum value
LayoutStyle.CUSTOM_GROUPS
. If custom partitions are specified usingCircularLayoutData.partitions
, they are respected by theCircularLayout
automatically. -
The
INodeSequencer
class has been removed from the API. Use the newCircularLayoutData.nodeComparator
property to specify custom node orders.
Incompatible Behavior Changes
-
PartitionDescriptor.initialAngle
is measured in degrees rather than radians. -
The default style of the
CircularLayout
'sComponentLayout
is changed toPACKED_CIRCLE
. -
The
CircularLayout
now considers node labels by default. -
The
CircularLayout
now places edge labels by default using a generic labeling algorithm.
Radial Layout
Incompatible API Changes
-
Renamed the
RadialLayout.minimumNodeToNodeDistance
property tominimumNodeDistance
. -
Renamed the
RadialLayout.minimumEdgeToEdgeDistance
property tominimumEdgeDistance
. -
RadialLayoutNodeInfo
has been renamed toRadialLayoutNodePlacementResult
. -
Renamed
LayeringStrategy
toRadialLayeringStrategy
. -
Replaced
ItemMapping
outEdgeComparers
withChildOrderData
childOrder
. -
Removed the enum value
Radial.LayeringStrategy.UserDefined
. Custom layers are now always used if defined viaRadialLayoutData.layerIds
property. -
Removed the enum value
CenterNodesPolicy.CUSTOM
. Custom center nodes are now always used if defined viaRadialLayoutData.centerNodes
property. -
The read/write
centerNodesDpKey
property from theRadialLayout
class has been removed. It was replaced by the static read-only keyRadialLayout.CENTER_NODES_DATA_KEY
that must now be used instead to mark the custom center nodes. -
Replaced properties
RadialLayoutData.nodeComparables
andRadialLayoutData.outEdgeComparers
with new, more powerfulchildOrder
property.
Incompatible Behavior Changes
-
The default style of the
RadialLayout
'sComponentLayout
is changed toPACKED_CIRCLE
. -
The
RadialLayout
now considers node labels by default. -
The
RadialLayout
now places edge labels by default using a generic labeling algorithm. -
The
RadialLayoutNodePlacementResult.sectorStart
property is now interpreted in clockwise direction. -
Custom layers are now always used if defined via
RadialLayoutData.layerIds
property. -
Custom center nodes are now always used if defined via
RadialLayoutData.centerNodes
property.
Radial Tree Layout
Incompatible API Changes
-
Renamed
RootNodePolicy
toRootSelectionPolicy
. -
BalloonLayout
has been renamed toRadialTreeLayout
, andBalloonLayoutData
has been renamed toRadialTreeLayoutData
. -
The following members have been removed from
BalloonLayout
(nowRadialTreeLayout
): The fieldgraph
, theBalloonLayout
class.NodeInfo
, the methodsgetInfo
,calculateChildArrangement
,calculateAngles
,determineRoot
, andsortChildNodes
, thefromSketchMode
property (use the new enum valueFromSketch
ofChildOrderingPolicy
instead), and theInterleavedMode
property (useRadialTreeLayoutData.interleavedNodes
instead). -
The following members of
BalloonLayout
(nowRadialTreeLayout
) have been renamed:preferredChildWedge
has been renamed topreferredChildSectorAngle
,preferredRootWedge
has been renamed topreferredRootSectorAngle
, and thegetPreferredChildWedge
method has been renamed togetPreferredChildSectorAngle
. -
The
InterleavedMode
enum has been removed. -
The enum value
InterleavedMode.MARKED_NODES
has been removed. To define specific parents for interleaved placed child nodes use theRadialTreeLayoutData.interleavedNodes
property. -
The enum value
RootNodePolicy.SELECTED_ROOT
has been removed. A custom root node is now always used if defined viaRadialTreeLayoutData.treeRoot
property. -
Replaced layout data
outEdgeComparer
property withChildOrderData
childOrder
. -
Removed
BalloonLayout.comparer
. UseRadialTreeLayoutData.childOrder
instead. -
Replaced
BalloonLayoutData.outEdgeComparer
property with new, more powerfulchildOrder
property (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)ComponentLayout
is changed toPACKED_CIRCLE
. -
The from-sketch option of
RadialTreeLayout
sorts like before but no longer takes precedence over orders specified with theRadialTreeLayoutData
propertieschildOrder
ornodeTypes
. -
The
RadialTreeLayout
now considers node labels by default. -
The
RadialTreeLayout
now places edge labels by default using an integrated labeling algorithm.
See the related new features.
Radial Group Layout
Incompatible API Changes
-
Renamed
CactusGroupLayout.groupSizingPolicy
toRadialGroupLayout.groupSizePolicy
. -
The
CactusGroupLayout
has been renamed toRadialGroupLayout
, and theCactusGroupLayoutData
has been renamed toRadialGroupLayoutData
. -
Property
preferredRootWedge
has been renamed topreferredRootSectorAngle
. -
Replaced
CactusGroupLayout.nodeComparer
property of typeIComparer
withRadialGroupLayoutData.childNodeComparator
of type Comparison function.
Incompatible Behavior Changes
-
The default style of the
RadialGroupLayout
's (formerlyCactusGroupLayout
's)ComponentLayout
is changed toPACKED_CIRCLE
. -
The default of the
preferredRootSectorAngle
property has been changed from 180 to 360. -
The
RadialGroupLayout
now places edge labels by default using a generic labeling algorithm.
Series-parallel Layout
Incompatible API Changes
-
The combinations of the enums
ForkStyle
andTreeLayoutPortAssignmentMode
have been integrated into theTreeLayoutPortAssignmentMode
enum, and theForkStyle
enum has been removed. -
DefaultPortAssignment.forkStyle
has been removed. -
Renamed
IPortAssignment
toISeriesParallelLayoutPortAssigner
. -
Renamed
DefaultPortAssignment
toSeriesParallelLayoutPortAssigner
. -
Renamed
SeriesParallelLayout.PORT_ASSIGNMENT_DP_KEY
toPORT_ASSIGNER_DATA_KEY
. -
Renamed
SeriesParallelLayoutData.portAssignments
toportAssigners
. -
Renamed the
SeriesParallelLayout.verticalAlignment
property toparallelSubgraphAlignment
. -
Renamed the
SeriesParallelLayout.minimumNodeToNodeDistance
property tominimumNodeDistance
. -
Renamed the
SeriesParallelLayout.minimumEdgeToEdgeDistance
property tominimumEdgeDistance
. -
Renamed
EdgeLayoutDescriptor
toSeriesParallelLayoutEdgeDescriptor
. -
Renamed
SeriesParallelLayout.defaultEdgeLayoutDescriptor
todefaultEdgeDescriptor
. -
Renamed
SeriesParallelLayout.EDGE_LAYOUT_DESCRIPTOR_DP_KEY
toEDGE_DESCRIPTOR_DATA_KEY
. -
Renamed
SeriesParallelLayoutData.edgeLayoutDescriptors
toedgeDescriptors
. -
The
generalGraphHandling
property was removed.SeriesParallelLayout
now handles general graphs by default. -
The
DefaultPortAssignment.borderGapToPortGapRatio
property was renamed toborderToPortGapRatio
. -
Remove methods
getPortBorderGap
andgetPortDistanceDelta
from theDefaultPortAssignment
class. -
The
SeriesParallelLayout.nonSeriesParallelEdgeLabelingAlgorithm
property has been renamed tononSeriesParallelEdgeLabeling
. -
Removed
SeriesParallelLayout.defaultOutEdgeComparer
. UseSeriesParallelLayoutData.childOrder
instead. Also removedDefaultOutEdgeComparer
class. -
Replaced
SeriesParallelLayoutData
property .outEdgeComparers
with new, more powerfulchildOrder
property.
Incompatible Behavior Changes
-
The
SeriesParallelLayout
now considers node labels by default. -
The
SeriesParallelLayout
now places edge labels by default using an integrated labeling algorithm. -
SeriesParallelLayout
now handles general graphs by default.
Compact Disk Layout
Incompatible Behavior Changes
-
The
CompactDiskLayout
now considers node labels by default. -
The
CompactDiskLayout
now places edge labels by default using a generic labeling algorithm.
Multi-page Layout
Incompatible API Changes
-
The
MultiPageLayout.createProxyReferenceNodes
property has been renamed touseProxyReferenceNodes
. -
The
EdgeBundleModes
enum and the associated properties have been renamed toMultiEdgeConnectorPolicy
. The enum values have been renamed toSEPARATE
,SHARE_FOR_SAME_DIRECTION
andSHARE
, respectively. The correspondingEdgeDataKey
has been renamed toMULTI_EDGE_CONNECTOR_ID_DATA_KEY
(previouslyEDGE_TYPE_DP_KEY
). -
Renamed
GroupingPolicy
toMultiPageGroupingPolicy
. -
The public API of the
MultiPageLayout
class has been changed.-
The
ILayoutCallback
interface has been removed. The respectiveMultiPageLayout.layoutCallback
property is now an Action delegate instead. Furthermore,MultiPageLayout.calculateLayout
method has been removed, meaning the layout can and should only be started like all other algorithms (e.g. via theLayoutExecutor
orIGraph.applyLayout
). -
The
IElementFactory
interface and theDefaultElementFactory
class have been removed. The replacement isMultiPageElementFactory
class which can be accessed and modified usingMultiPageLayout.elementFactory
property. -
The
MultiPageLayout.createElementFactory
method has been removed. The factory can be get and set usingMultiPageLayout.elementFactory
property. -
The
IElementInfoManager
interface has been removed. -
The
LayoutContext
class of theMultiPageLayout
has been renamed toMultiPageLayoutContext
and its properties Graph and Layout have been removed. -
The
INodeInfo
,IEdgeInfo
,INodeLabelInfo
,IEdgeLabelInfo
interfaces related toMultiPageLayout
have 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
,routeRestoredEdges
andapplyIncrementalLayout
have been removed.
-
The
-
MultiPageLayoutResult.getPage
andpageCount
have been replaced bypageGraphs
. -
MultiPageLayoutData
handles the ID mapping automatically. Consequently, the explicit mappingsnodeIds
,edgeIds
,nodeLabelIds
, andedgeLabelIds
have been removed. Original graph items can be obtained by callingMultiPageLayoutData.getOriginalItem
. -
Renamed
NodeType
toMultiPageNodeType
and its valueNormal
toMultiPageNodeType.REGULAR
. -
Renamed
EdgeType
toMultiPageEdgeType
and its valueNormal
toMultiPageEdgeType.REGULAR
. -
The
EdgeBundleModes
enum has been renamed toMultiEdgeConnectorPolicy
and converted from a flags enum to a regular enum. To manually select which multi-edges should be distinguished, use theMultiPageLayoutData.multiEdgeConnectorIds
property. -
The properties
MultiPageLayout.edgeBundleModeMask
,MultiPageLayout.EDGE_TYPE_DP_KEY
, andMultiPageLayoutData.edgeTypes
have been renamed toMultiPageLayout.multiEdgeConnectorPolicy
,MultiPageLayout.MULTI_EDGE_CONNECTOR_ID_DATA_KEY
, andMultiPageLayoutData.multiEdgeConnectorIds
.
Partial Layout
Incompatible API Changes
-
Renamed
LayoutOrientation
toPartialLayoutOrientation
. -
The
PartialLayout.layoutSubgraph
method has been removed. -
The callback
configureEdgeRouter
method has been removed from classesPartialLayout
andClearAreaLayout
. The router instance can be specified via thePartialLayout.edgeRouter
andClearAreaLayout.edgeRouter
properties 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.componentIds
orFillAreaLayoutData.componentIds
respectively.
Incompatible Behavior Changes
-
Custom components are now always used if defined with
PartialLayoutData.componentIds
.
See the related new features.
Tabular Layout
Incompatible API Changes
-
Renamed
NodeLayoutDescriptor
toTabularLayoutNodeDescriptor
. -
Renamed
TabularLayout.defaultNodeLayoutDescriptor
todefaultNodeDescriptor
. -
Renamed
TabularLayout.NODE_LAYOUT_DESCRIPTOR_DP_KEY
toNODE_DESCRIPTOR_DATA_KEY
. -
Renamed
TabularLayoutData.nodeLayoutDescriptors
tonodeDescriptors
. -
Renamed
TabularLayoutPolicy
toTabularLayoutMode
. -
Replaced
TabularLayout.nodeComparer
property of typeIComparer
withTabularLayoutData.freeNodeComparator
of type Comparison function. -
The
TabularLayout
class 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
TabularLayout
now considers node labels by default. -
The
TabularLayout
now places edge labels by default using a generic labeling algorithm.
Component Layout
Incompatible API Changes
-
The
ComponentArrangementStyles
enum has been renamed toComponentArrangementStyle
, as it is no longer a Flags-Enum.-
Removed
ComponentArrangementStyles.MASK
. -
Replaced
ComponentArrangementStyles.MODIFIER_NO_OVERLAP
withTRY_KEEP_CENTERS
. -
Replaced
ComponentArrangementStyles.MODIFIER_AS_IS
withComponentLayout.fromSketchMode
.
-
Removed
-
Renamed
ComponentLayout.calculateBounds
tocalculateComponentBounds
. -
Renamed
ComponentLayout.setOrigin
tosetComponentLocation
. -
The
IsolatedGroupComponentLayout
class has been removed. -
Renamed
ComponentArrangementStyles.NONE
toComponentArrangementStyle.KEEP_CENTERS
. -
Removed the
componentArrangement
property fromComponentLayout
; use the newComponentArrangementStyle.NONE
instead to avoid arranging components. -
Removed
ComponentLayout.arrangeFields
method. -
Simplified parameter lists of methods
ComponentLayout.arrangeComponents
andComponentLayout.setOrigin
to now accept instances of Component class. -
If
ComponentLayout
is used as a pre-processing step to apply a layout algorithm on multiple connected components, thestopDuration
of that layout is divided appropriately over all components, instead of being applied once per component.
Incompatible Behavior Changes
-
ComponentArrangementStyle.PACKED_CIRCLE
andComponentArrangementStyle.PACKED_RECTANGLE
now consider the convex hulls of components to determine overlaps.
See the related new features.
Tree Map Layout
Incompatible API Changes
-
Renamed
TilingPolicy
toTilingStrategy
andTreeMapLayout.tilingPolicy
toTreeMapLayout.tilingStrategy
. -
Replaced
TreeMapLayout.nodeComparer
property of typeIComparer
withTreeMapLayoutData.childNodeComparator
of type Comparison function. -
Removed the
NodeWeightComparer
class.
Recursive Group Layout
Incompatible API Changes
-
RecursiveGroupLayout.NULL_LAYOUT
is renamed toRecursiveGroupLayout.FIX_CONTENT_LAYOUT
. -
FixGroupLayoutStage
is removed and its functionality is replaced byRecursiveGroupLayout
usingRecursiveGroupLayout.FIX_GROUP_LAYOUT
for all groups. -
The
RecursiveGroupLayout
class now ignores empty group nodes by default (seeconsiderEmptyGroups
property). -
The signature of
ILayoutGroupBoundsCalculator.calculateBounds
method was changed. The given children are now of typeIListEnumerable
<Node>
. -
The
GroupBoundsCalculator
implementation now keeps the center of empty group nodes ifconsiderEmptyGroups
is enabled. -
Method
GroupBoundsCalculator.calculateBounds
now 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
-
PartitionGrid
is renamed toLayoutGrid
. This also affects the related classesPartitionGridData
,GenericPartitionGridStage
, andGenericPartitionGridStageData
. -
Renamed
ColumnDescriptor
toLayoutGridColumn
&RowDescriptor
toLayoutGridRow
. -
Renamed
PartitionCellId
toLayoutGridCellDescriptor
. -
Renamed inset properties on classes
LayoutGridColumn
(formerlyColumnDescriptor
) andLayoutGridRow
(formerlyRowDescriptor
) to now be called padding (e.g.,leftPadding
instead ofleftInset
). -
Removed helper class
Swimlanes
andSwimlaneRepresentative
. -
Removed the
SwimlanesMode
enum. -
The methods
PartitionGrid.prepareOrientationChange
andPartitionGrid.finalizeOrientationChange
have been removed. -
Removed properties
originalPosition
andoriginalWidth
fromLayoutGridColumn
class (formerlyColumnDescriptor
). Use propertiesLayoutGridColumn.position
(formerlycomputedPosition
) orLayoutGridColumn.width
(formerlycomputedWidth
). -
Removed properties
originalPosition
andoriginalHeight
fromLayoutGridRow
class (formerlyRowDescriptor
). Use propertiesLayoutGridRow.position
(formerlycomputedPosition
) orLayoutGridRow.height
(formerlycomputedHeight
). -
The
SwimlaneDescriptor
class has been removed from the API. UseLayoutGrid
class (formerly calledPartitionGrid
) instead, which is able to model one-dimensional and two-dimensional grids. -
The
PartitionGridLayoutStage
class has been removed. It is not necessary to manually add this stage, sinceHierarchicalLayout
can supportLayoutGrid
out-of-the-box. - Renamed all types, methods and properties containing "CellId" to "CellDescriptor".
-
Removed properties
optimizeRowOrder
andoptimizeColumnOrder
fromPartitionGridData
class. -
Removed the data key
PartitionGrid.PARTITION_GRID_DP_KEY
. The keyLayoutGrid.LAYOUT_GRID_CELL_DESCRIPTOR_DATA_KEY
is 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_KEY
is now the only data key which can be used to specify layout grids.
Other Layouts
Incompatible API Changes
-
Renamed
CurveFittingLayoutStage
toCurveFittingStage
. -
Renamed
FixNodeLayoutStage
toLayoutAnchoringStage
andFixNodeLayoutData
toLayoutAnchoringStageData
. In addition:-
Renamed
FixPointPolicy
toLayoutAnchoringPolicy
. -
Renamed
FixNodeLayoutStage.FIXED_NODE_DP_KEY
toNODE_ANCHORING_POLICY_DATA_KEY
. -
Renamed
calculateFixPoint
tocalculateAnchorPoint
. -
Removed
FixNodeLayoutData.fixedNodes
. Graph elements to anchor the graph on can be specified by setting the respectiveAnchoringPolicies
usingLayoutAnchoringStageData
.
-
Renamed
-
Removed the Grouping
enum.InterEdgeRoutingStyle
.
Algorithms
Incompatible API Changes
-
IntersectionInfo
has been renamed toIntersection
. -
Renamed
ParallelEdges.findParallelEdges
toLayoutGraphAlgorithms.findMultiEdges
. -
Removed the
BfsDirection
enum. UseTraversalDirection
instead. -
The
TreeAnalyzer
class has been removed. Use the more convenient and powerfulTreeAnalysis
class instead. -
Removed the Intersections class. Use corresponding methods of
LayoutGraphAlgorithms
instead. -
Removed the
IntersectionAlgorithm
class. Use corresponding methods ofLayoutGraphAlgorithms
instead. -
Removed the
NetworkFlows
class. Use corresponding methods ofLayoutGraphAlgorithms
instead (e.g.MaximumFlow
). -
Removed the
NodeOrders
class. Use corresponding methods ofLayoutGraphAlgorithms
instead (e.g.topologicalNodeOrder
). -
Removed the
GraphConnectivity
class. Use corresponding methods ofLayoutGraphAlgorithms
instead. -
Removed the
IndependentSets
class. Use corresponding methods ofLayoutGraphAlgorithms
instead. - The Triangulator algorithm class has been removed.
-
Removed the Substructures class. Use corresponding methods of
LayoutGraphAlgorithms
instead. -
Removed the Trees class. Use corresponding methods of
LayoutGraphAlgorithms
instead. -
Removed the Bipartitions class. Use corresponding methods of
LayoutGraphAlgorithms
instead. -
Removed the Cycles class. Use corresponding methods of
LayoutGraphAlgorithms
instead. -
Removed the
ParallelEdges
class. Use corresponding methods ofLayoutGraphAlgorithms
instead. -
Removed the Transitivity class. Use corresponding methods of
LayoutGraphAlgorithms
instead. -
Removed the Centrality class. Use corresponding methods of
LayoutGraphAlgorithms
instead. -
Removed the
ShortestPaths
class. Use corresponding methods ofLayoutGraphAlgorithms
class instead (e.g.ShortestPath
). -
Removed the Groups class. Use corresponding methods of
LayoutGraphAlgorithms
instead. -
Renamed the Groups
class.Dendrogram
toHierarchicalClusteringDendrogram
. -
Removed the Bfs class. Use
LayoutGraphAlgorithms.bfs
instead. -
Removed the Dfs class. Use
LayoutGraphAlgorithms.dfs
instead. -
Renamed
Component
toConnectedComponent
. -
The
SpanningTrees
class has been removed. To compute a minimum spanning tree, useLayoutGraphAlgorithms.minimumSpanningTree
method. -
The
RankAssignments
class has been removed in favor of the singleLayoutGraphAlgorithms.simplexRankAssignment
method that offers access to the rank assignment algorithm. -
The
GraphChecker
class has been removed and most of its methods are now available onLayoutGraphAlgorithms
. -
The
NodeAggregation
class has been renamed toLayoutGraphNodeAggregation
, emphasizing that this class is intended for users working with theLayoutGraph
API only.-
Furthermore, its member
NODE_TYPE_DP_KEY
has been removed. The replacement is keyLayoutKeys.NODE_TYPE_DATA_KEY
. -
Also, its member
NODE_CENTER_DP_KEY
has been removed. Node centers are now directly read from theLayoutGraph
instance which must contain the coordinates of nodes if useful results should be generated.
-
Furthermore, its member
-
Removed the enum value
EUCLIDEAN_SQUARED
fromDistanceMetric
enum. Use enum value Euclidean instead which now calculates with squared values. -
Removed the
DistanceMetric
enum ofKMeansClustering
class. UseKMeansDistanceMetric
enum instead. -
Removed the
aggregationPolicy
enum ofNodeAggregation
class. UseaggregationPolicy
enum instead. -
Removed the utility class
Sorting
that 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.
See the related new features.
Analysis
Incompatible API Changes
-
The
NodeAggregation.nodeTypeHandling
property has been renamed toNodeTypePolicy
. -
The
NodeAggregationNodeTypeHandlingPolicy
enum has been renamed toNodeTypePolicy
. -
Renamed
AggregationInfo
toNodeAggregationInfo
. -
Renamed
AggregationInfo.parentAggregation
toparentNodeAggregation
. -
Renamed
NodeAggregation.AggregationPolicy
toNodeAggregationPolicy
. -
Renamed
NodeAggregation.aggregation
toaggregationPolicy
. -
Renamed
DistanceMetric
toKMeansDistanceMetric
. -
Renamed
GraphStructureAnalyzer.hasMultipleEdges
tohasMultiEdges
. -
Renamed
GraphStructureAnalyzer.getMultipleEdges
togetMultiEdges
. -
Replaced enum
Linkage
withHierarchicalClusteringLinkage
. -
Renamed
Substructure
toSubstructureItems
. -
Renamed
Component
toConnectedComponent
.
See the related new features.
Collections
Incompatible API Changes
-
The
YList.elementAt
method was removed. -
Renamed
ItemMapping.delegate
tomapperFunction
. -
Renamed
ItemCollection.delegate
to predicate. -
Renamed
IUndoUnit.createDelegateUnit
tofromHandler
. -
Renamed
IAnimation.fromDelegate
tofromHandler
. -
Renamed
IMapper.fromDelegate
tofromHandler
. -
The
elementAt
method on theIEnumerable
interface was removed. Use theat
method, instead. -
The
skip
method on theIEnumerable
interface is now calleddrop
and no longer has athisArg
parameter to match the counterpart in the ECMAScript Iterator Helpers stage 3 proposal. -
The
skipWhile
method on theIEnumerable
interface is now calleddropWhile
and no longer has athisArg
parameter. -
The
distinct
,groupBy
, andsum
methods on theIEnumerable
interface no longer have athisArg
parameter. -
The
list
class constructor no longer has athisArg
parameter. -
The
first
andlast
methods on theIEnumerable
interface no longer accept a predicate function. Usefind
andfindLast
instead. -
The predicate function of the
find
andfindLast
methods on theIEnumerable
interface is no longer optional. -
The parameter of the
includes
method on theIEnumerable
interface is no longer nullable. -
The
orderBy
method of theIEnumerable
interface is now calledtoSorted
. ThekeySelector
parameter was removed to match the signature ofArray.toSorted
. -
The
orderByDescending
method has been removed theIEnumerable
interface. -
The
sort
method has been removed from classYList
. -
The
sort
method with theIComparer
parameter has been removed from classList
.<T>
-
Renamed
ICursor.prev
toICursor.previous
. -
Renamed
ListCell.succ
toListCell.next
. -
Renamed
ListCell.pred
toListCell.previous
. -
Removed the
isEmpty
method fromYList
class. TestYList.size
property for 0 instead. -
Removed the methods
succCell
andpredCell
fromYList
class. Use new propertiesListCell.next
andListCell.previous
instead. -
Removed the methods
cyclicSucc
,cyclicPred
,containsAll
andretainAll
fromYList
class. -
Removed the methods Succ and Pred from
ListCell
class. Use new properties Next and Previous instead. -
Removed the Peek method from
YList
class. Use First property instead.
Incompatible Behavior Changes
-
The
first
,last
andfindLast
methods on theIEnumerable
interface now returnnull
instead of throwing when no element was found. -
The
at
method on theIEnumerable
interface now returnsnull
instead ofundefined
when out of range.
See the related new features.
Geometry
Incompatible API Changes
-
All
intersects
methods of theGeneralPath
class are now calledpathIntersects
. -
The
mayIntersectClip
method of theGeneralPath
class is now calledpathMayIntersectClip
. -
All
areaContains
methods of theGeneralPath
class now have an optionalflatteningTolerance
parameter. -
The
isEmpty
method of theGeneralPath
class was removed. Use theisVisible
method or thesize
property, instead. -
The
GetBounds
overload of theGeneralPath
class that returns the approximate bounds for Bézier segments is now calledgetApproximateBounds
. -
The copy constructors on the
Rect
,Point
, andSize
classes were removed. Use thetoRect
,toPoint
, ortoSize
methods respectively instead. -
Renamed the
GeomUtilities.findRayIntersection
method togetSegmentRayIntersection
. -
Renamed the
GeomUtilities.findEllipseLineIntersection
method togetEllipseLineIntersection
. -
Moved
Geom.collinear
method toGeometryUtilities
class and renamed toareCollinear
. -
Moved
Geom.calcConvexHull
method toGeometryUtilities
class and renamed togetConvexHull
. -
Moved
Geom.CalcLineIntersection
method toGeometryUtilities
class and renamed togetLineLineIntersection
. -
Removed the
Geom.projection
method. UsePoint.getProjectionOnSegment
method instead. -
Removed the methods
distanceToLineSegment
of Geom class. UsePoint.distanceToSegment
method instead. -
The
IRectangle
interface no longer implementsIPoint
. You can get the top-left corner of a rectangle with itstopLeft
method. For usages of the dynamic behavior ofIPoint
, like in a customIPositionHandler
, we recommend to let theIPositionHandler
implementIPoint
, too. -
The
IMutableRectangle
interface no longer implementsIMutablePoint
. When working with theMutableRectangle
class, use itsLocation
property to get a dynamic point of the location. -
Renamed the
LineSegment.xOffset
property toyIntercept
. -
Made
LineSegment
class sealed. -
Renamed the
LineSegment.isInXIntervall
method toLineSegment.isInXInterval
andLineSegment.isInYIntervall
method toLineSegment.isInYInterval
.
See the related new features.