yFiles FLEX Client Layout Extension Release Notes

Version 1.5 is the newest yFiles FLEX Client Layout Extension release available. (See also the entire yFiles FLEX Client Layout Extension change log.)

Technical Requirements

  • The yFiles FLEX Client Layout Extension requires yFiles FLEX 1.9 version series. It cannot be compiled or used without the yFiles FLEX library.
  • Client applications that make use of yFiles FLEX Client Layout Extension require Adobe® Flash® Player version 10.
  • AIR desktop applications that make use of yFiles FLEX Client Layout Extension require Adobe Integrated Runtime (AIR) version 1.5.
  • Compiling client applications as well as AIR desktop application that make use of yFiles FLEX Client Layout Extension requires Flex 3.2 SDK or higher.

yFiles FLEX Client Layout Extension 1.5 - Changes Since 1.4

Major Features Added

Layout

  • Added new layout algorithm com.yworks.yfiles.layout.seriesparallel.SeriesParallelLayouter for graphs that are constructed only by series (combining two series parallel graphs by merging the source of one graph with the sink of the other) and parallel (combining two series parallel graphs by merging the sources and the sinks) operations.
  • Added new layout algorithm com.yworks.yfiles.layout.radial.RadialLayouter that places nodes on concentric circles. Edges are routed in a radial fashion using one of several routing strategies.
  • Added multi-parent support to com.yworks.yfiles.layout.tree.GenericTreeLayouter. A tree node can have multiple parents that are connected to all of its siblings and share the same parents. This might come to use in organizational charts where a team answers to multiple superiors.
  • Added support for terminating (layout) algorithms prematurely. To this end, new class com.yworks.yfiles.algo.AbortHandler provides methods for requesting early but graceful termination (see stop()) and immediate termination (see cancel()). The following layout algorithms have at least rudimentary support for immediate termination:

    Layout Algorithms
    • com.yworks.yfiles.layout.tree.BalloonLayouter
    • com.yworks.yfiles.layout.circular.CircularLayouter
    • com.yworks.yfiles.layout.orthogonal.CompactOrthogonalLayouter
    • com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter
    • com.yworks.yfiles.layout.tree.GenericTreeLayouter
    • com.yworks.yfiles.layout.organic.GRIP
    • com.yworks.yfiles.layout.hierarchic.HierarchicGroupLayouter
    • com.yworks.yfiles.layout.hierarchic.HierarchicLayouter
    • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
    • com.yworks.yfiles.layout.organic.OrganicLayouter
    • com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter
    • com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter
    • com.yworks.yfiles.layout.partial.PartialLayouter
    • com.yworks.yfiles.layout.radial.RadialLayouter
    • com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter
    • com.yworks.yfiles.layout.organic.SmartOrganicLayouter

    Routing Algorithms
    • com.yworks.yfiles.layout.router.BusRouter
    • com.yworks.yfiles.layout.router.polyline.EdgeRouter
    • com.yworks.yfiles.layout.router.OrganicEdgeRouter
    • com.yworks.yfiles.layout.router.OrthogonalEdgeRouter

    Other Algorithms
    • com.yworks.yfiles.layout.labeling.GreedyMISLabeling
    • com.yworks.yfiles.layout.labeling.SALabeling

    The following layout algorithms also support graceful early termination:

    Layout Algorithms
    • com.yworks.yfiles.layout.hierarchic.HierarchicGroupLayouter
    • com.yworks.yfiles.layout.hierarchic.HierarchicLayouter
    • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
    • com.yworks.yfiles.layout.organic.OrganicLayouter
    • com.yworks.yfiles.layout.organic.SmartOrganicLayouter

    Routing Algorithms
    • com.yworks.yfiles.layout.router.polyline.EdgeRouter

    Other Algorithms
    • com.yworks.yfiles.layout.labeling.SALabeling

  • Introduced concept of node halos. Halos are reserved space around a node in which layout algorithms will not place other graph elements. Node halos are modelled using class com.yworks.yfiles.layout.NodeHalo. The following layout algorithms support node halos:

    Layout Algorithms
    • com.yworks.yfiles.layout.tree.BalloonLayouter
    • com.yworks.yfiles.layout.circular.CircularLayouter
    • com.yworks.yfiles.layout.orthogonal.CompactOrthogonalLayouter
    • com.yworks.yfiles.layout.ComponentLayouter
    • com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter
    • com.yworks.yfiles.layout.tree.GenericTreeLayouter
    • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
    • com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter
    • com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter
    • com.yworks.yfiles.layout.radial.RadialLayouter
    • com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter
    • com.yworks.yfiles.layout.organic.SmartOrganicLayouter
    • com.yworks.yfiles.layout.tree.TreeLayouter
    Routing Algorithms
    • com.yworks.yfiles.layout.router.polyline.EdgeRouter
    • com.yworks.yfiles.layout.SelfLoopLayouter
    Other Algorithms
    • com.yworks.yfiles.layout.labeling.GreedyMISLabeling
    • com.yworks.yfiles.layout.labeling.SALabeling
    • com.yworks.yfiles.layout.grouping.InsetsGroupBoundsCalculator
    • com.yworks.yfiles.layout.grouping.MinimumSizeGroupBoundsCalculator

  • Added grid placement support for nodes and edges to com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Added support for partition grid layout. See com.yworks.yfiles.layout.grid.PartitionGrid.

Minor Features Added

Layout

  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Added support for incremental group nodes (see com.yworks.yfiles.layout.hierarchic.incremental.IncrementalHintsFactory#createIncrementalGroupHint(Object)). Incremental groups will be placed on a suitable position. The hints of their descendants are interpreted relative to the group node.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Improved partition grid support. Nodes can now be mapped to a multi-lane partition cell identifier, i.e., a cell spanning multiple columns and rows. See com.yworks.yfiles.layout.grid.PartitionGrid.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Improved edge label placement. Edge labels with preferred placement at source/target are placed closer to the corresponding node. Additionally, com.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer offers the option to place adjacent edge labels in a compact, stacked style. See new property useLabelCompaction.
  • com.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer: Added option useNodeCompaction that allows to place adjacent nodes of a layer in a more compact, stacked style.
  • Added vertical alignment option for com.yworks.yfiles.layout.tree.DefaultNodePlacer and com.yworks.yfiles.layout.tree.SimpleNodePlacer. In addition to the previous compact child placement, siblings can now be aligned at top, center or bottom for example.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: Added support for critical edges in com.yworks.yfiles.layout.tree.DefaultNodePlacer, com.yworks.yfiles.layout.tree.DendrogramPlacer, com.yworks.yfiles.layout.tree.SimpleNodePlacer, com.yworks.yfiles.layout.tree.LayeredNodePlacer and com.yworks.yfiles.layout.tree.DoubleLinePlacer. Nodes connected to a critical edge will be center aligned which can be used to highlight certain paths in the tree.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: Added support for grouped edges in com.yworks.yfiles.layout.tree.DefaultPortAssignment. Grouped edges will share the same port location at local root.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: When enabling com.yworks.yfiles.layout.tree.GenericTreeLayouter#integratedNodeLabeling and/or com.yworks.yfiles.layout.tree.GenericTreeLayouter#integratedEdgeLabeling, the respective labels will be taken into account during the calculation of group bounds.
  • Added class com.yworks.yfiles.layout.tree.GroupedNodePlacer that allows com.yworks.yfiles.layout.tree.GenericTreeLayouter to place siblings into different groups.
  • com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter: Added option interEdgeRouter to specify an edge router to layout edges that cross group node bounds. Thus, it is not necessary to subclass the layouter to change inter-edge routing anymore.
  • Added layout stage com.yworks.yfiles.layout.KeepStrongPortConstraintsStage which ensures that layout algorithms that cannot handle port constraints keep the ports of edges with strong port constraints.
  • Added layout stage com.yworks.yfiles.layout.PortCandidateAssignmentStage which assigns edges to the ports specified by com.yworks.yfiles.layout.PortConstraints or com.yworks.yfiles.layout.PortCandidates after calling the core layout.
  • com.yworks.yfiles.layout.tree.BalloonLayouter: Added support for integrated node and edge labeling. See new properties integratedEdgeLabelingEnabled, integratedNodeLabelingEnabled, and nodeLabelingPolicy.
  • com.yworks.yfiles.layout.tree.BalloonLayouter: Added support for different policies to align nodes having the same root node. See new property childAlignmentPolicy.
  • com.yworks.yfiles.layout.tree.BalloonLayouter: Added support for interleaved child node placement. With interleaved placement, child nodes are placed at different distances to their parent node to achieve a more compact layout. See new property interleavedMode.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Added a fine-granular configuration option to weigh the crossing costs for each label using the data provider look-up key com.yworks.yfiles.layout.router.polyline.EdgeRouter#LABEL_CROSSING_COST_FACTOR_DPKEY.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Added option ignoreInnerNodeLabelsEnabled for ignoring node labels that are inside the bounds of their owner node. Node labels that are ignored because of this setting may be crossed by edges. This is especially useful if inner labels of group nodes may be crossed but outer labels of normal nodes may not.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Added support for customizing the order in which edges are routed. See new property edgeOrderComparator.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Now supports handling of directed and undirected edges; see data provider key DIRECTED_EDGES_DPKEY.
  • com.yworks.yfiles.layout.LabelLayoutTranslator: Added properties writeBackRelativeEdgeLabelLocationEnabled and writeBackRelativeNodeLabelLocationEnabled that allow a core layouter to specify new node or edge label locations relative to the label's owner.
  • com.yworks.yfiles.layout.LabelLayoutKeys: Added key IGNORE_LABEL_KEY that allows specifying which edge and node labels should be ignored during layout calculations.
  • Added new class com.yworks.yfiles.layout.organic.OrganicRemoveOverlapsStage that removes node overlaps while respecting a specified minimal node distance. Unlike the approach implemented in class com.yworks.yfiles.layout.organic.RemoveOverlapsLayoutStage, this approach tries to keep the original layout structure, i.e., it tries to keep the geometric distance between the nodes.

Improvements

Algorithms

  • com.yworks.yfiles.algo.Dfs: Added method cancel() that can be used by subclasses to cancel the search.
  • com.yworks.yfiles.algo.Cycles: Improved method findCycle(Graph, Boolean) to stop the search as soon as the first cycle has been found.

Layout

  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Minor performance improvements.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Reduced number of group node overlaps that may appear for groups containing elements with tail/head constraints, see com.yworks.yfiles.layout.hierarchic.incremental.SequenceConstraintFactory#addPlaceNodeAtTailConstraint(Object) and com.yworks.yfiles.layout.hierarchic.incremental.SequenceConstraintFactory#addPlaceNodeAtHeadConstraint(Object).
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: The group transposition feature (see com.yworks.yfiles.layout.hierarchic.incremental.DefaultLayerSequencer#setGroupTranspositionEnabled(Boolean)) can now also be used in incremental layout mode.
  • com.yworks.yfiles.layout.hierarchic.incremental.ConstraintIncrementalLayerer: Improved handling of same layer constraints. In previous versions the layerer sometimes ignores same layer constraints even though there is a valid layering.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: More compact placement of rotated as well as stacked labels.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: The default sequencing phase has been improved to produce less crossings and run faster.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Now prevents overlaps among same layer edges attached to group nodes.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: During layering, edges connected to group nodes may be redirected and replaced by dummy edges connected to the children of the group node. For these dummy edges com.yworks.yfiles.layout.hierarchic.incremental.LayoutDataProvider#getEdgeData(Edge) now returns an com.yworks.yfiles.layout.hierarchic.incremental.EdgeData of the new type com.yworks.yfiles.layout.hierarchic.incremental.EdgeData#TYPE_REDIRECTED_GROUP_EDGE.
  • com.yworks.yfiles.layout.hierarchic.incremental.PCListOptimizer: Improved port candidate assignment calculated by method optimizeAfterSequencing(LayoutGraph, Layers, LayoutDataProvider, ItemFactory).
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Improved performance.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Now also considers the group node compactness (see option groupNodeCompactness) if option nodeEdgeOverlapAvoided is enabled.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Improved node overlap removal (see option nodeOverlapsAllowed). Now, if the scope is set to SCOPE_SUBSET or SCOPE_MAINLY_SUBSET, the number of node overlaps that cannot be removed is reduced.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Now uses a more sophisticated approach to remove node overlaps if the scope is set to SCOPE_ALL and the quality to time ratio (see qualityTimeRatio) is greater than or equal to 0.7.
  • com.yworks.yfiles.layout.organic.InteractiveOrganicLayouter: Fixed possible performance problem after changing the inertia/stress of some nodes.
  • com.yworks.yfiles.layout.tree.LayeredNodePlacer: Reduced overlaps between edges and node labels for all routing styles.
  • com.yworks.yfiles.layout.tree.GridNodePlacer: Corrected alignment of child nodes and edge routing when there are node labels.
  • com.yworks.yfiles.layout.tree.AbstractRotatableNodePlacer_RootAlignment, com.yworks.yfiles.layout.tree.DefaultNodePlacer and com.yworks.yfiles.layout.tree.DendrogramPlacer: Instead of aligning bounding boxes including nodes and their labels, nodes are aligned directly with other nodes. Therefore a layout with node labels gets more compact and the alignment is consistent with that of graphs without node labels.
  • com.yworks.yfiles.layout.tree.DelegatingNodePlacer: Added support for a child comparator for children of local root nodes.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter now ignores labels with zero width or height in all distance calculations.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: com.yworks.yfiles.layout.tree.NodePlacer implementations now also use the specified spacing as minimum distance between different subtrees.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Reduced number of element overlaps if there are partial group nodes.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Now considers port constraints independent of the specified layout orientation. Note that port constraints are considered only if the core layout algorithm (see coreLayouter)) supports port constraints as well.
  • com.yworks.yfiles.layout.partial.PartialLayouter_StraightLineEdgeRouter: Added support for port constraints.
  • com.yworks.yfiles.layout.ParallelEdgeLayouter: Now always separates parallel edges according to their direction, i.e., edges (v,w) and (w,v) are never placed interleaved.
  • com.yworks.yfiles.layout.labeling.SALabeling and com.yworks.yfiles.layout.labeling.GreedyMISLabeling: Both algorithms now also consider the node/edge overlap penalty specified by a com.yworks.yfiles.layout.LabelCandidate.
  • Improved performance - especially for large graph instances - of generic labeling algorithms com.yworks.yfiles.layout.labeling.GreedyMISLabeling and com.yworks.yfiles.layout.labeling.SALabeling.
  • com.yworks.yfiles.layout.PartitionLayouter: Added nested class com.yworks.yfiles.layout.PartitionLayouter_PolylineInterEdgeRouter that routes inter-edges using class com.yworks.yfiles.layout.router.polyline.EdgeRouter.
  • com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter: Added option replacePortConstraints that replaces port constraints by port candidates and, thus, may improve the layout result.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: improved performance.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Memory usage has been reduced.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Added penalty setting for edge length. See com.yworks.yfiles.layout.router.polyline.PenaltySettings edgeLengthPenalty.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Now avoids very small octilinear segments.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Added four predefined optimization strategies. See com.yworks.yfiles.layout.router.polyline.PenaltySettings#OPTIMIZATION_BALANCED, com.yworks.yfiles.layout.router.polyline.PenaltySettings#OPTIMIZATION_EDGE_BENDS, com.yworks.yfiles.layout.router.polyline.PenaltySettings#OPTIMIZATION_EDGE_CROSSINGS, and com.yworks.yfiles.layout.router.polyline.PenaltySettings#OPTIMIZATION_EDGE_LENGTHS.
  • com.yworks.yfiles.layout.router.ChannelRouter: Improved performance.
  • com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter and com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter: Added optimization step that reduces the number of perceived bends. See new property perceivedBendsOptimization.
  • com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter: Improved performance.
  • com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter, com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter and com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter: Added optimization step that aligns degree one nodes (i.e. nodes with one incident edge) that have the same neighbor. See new property alignDegreeOneNodes.
  • com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter: Improved routing and edge labeling for self-loops of normal (non-group) nodes.
  • com.yworks.yfiles.layout.circular.CircularLayouter: Improved performance.
  • com.yworks.yfiles.layout.LayoutTool: Added new rectangle arrangement method arrangeRectangleMultiRowsWithAlignment(Vector.<Object>, Rectangle2D, Number, Number, Boolean, int, int) suitable for arranging rows of rectangles with highly different sizes.
  • com.yworks.yfiles.layout.ComponentLayouter: Added new component arrangement strategies STYLE_MULTI_ROWS, STYLE_MULTI_ROWS_COMPACT, STYLE_MULTI_ROWS_HEIGHT_CONSTRAINED, STYLE_MULTI_ROWS_HEIGHT_CONSTRAINED_COMPACT, STYLE_MULTI_ROWS_WIDTH_CONSTRAINED, and STYLE_MULTI_ROWS_WIDTH_CONSTRAINED_COMPACT suitable for components with highly different sizes.

Bugfixes

Algorithm

  • com.yworks.yfiles.algo.Trees: fixed method getCenterRoot(Graph) that didn't always return the correct center node of a tree.
  • com.yworks.yfiles.algo.ShortestPaths: Fixed ReferenceError that occurred when applying the Dijkstra or Bellman-Ford algorithm to an empty graph.

Layout

  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed Error that may appear in incremental layout mode if there are group nodes that contain non-incremental elements.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that may cause an incorrect order of elements if the graph contains sequence constraints.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed problem that may cause a very long runtime if the layouter is applied in incremental mode and the graph contains sequence constraints.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that caused that the layer of an incremental group (see com.yworks.yfiles.layout.hierarchic.incremental.IncrementalHintsFactory#createIncrementalGroupHint(Object)) depends on the group's location if recursive layering is enabled (see com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter#recursiveGroupLayering). However, the position of incremental groups should be freely chosen by the layouter.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed orientation of edge labels on selfloops connected to a group node.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed ReferenceError that occurred if an incremental group node has only incremental descendants.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed problem that caused bad results when assigning top or bottom layer constraints (i.e., com.yworks.yfiles.layout.hierarchic.incremental.LayerConstraintFactory#addPlaceNodeAtTopConstraint(Object) or com.yworks.yfiles.layout.hierarchic.incremental.LayerConstraintFactory#addPlaceNodeAtBottomConstraint(Object)) to fixed elements.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that caused collinear bends in some edge routes.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that caused the maximum duration values specified for com.yworks.yfiles.layout.hierarchic.incremental.Layerer, com.yworks.yfiles.layout.hierarchic.incremental.Sequencer and com.yworks.yfiles.layout.hierarchic.incremental.NodePlacer to be overridden and not considered during the hierarchic layout.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed label placement for octilinear selfloops with the same side constraints for source and target port.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed routing style violations in octilinear grouped edges.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed ReferenceError that could occur when octilinear edges are attached to group nodes.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that caused first or last segments of edges to be too short to span all associated labels.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter and com.yworks.yfiles.algo.RankAssignments: Fixed possible ReferenceError that may occur if the maximal duration of the algorithm is limited.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that may cause overlaps of edge labels with preferred placement at source/target.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed rare Error that may appear for grouped graphs containing nodes with fixed coordinates hint (see, e.g., com.yworks.yfiles.layout.hierarchic.incremental.IncrementalHintsFactory#createUseExactCoordinatesHint(Object)).
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that breaks incremental hints of grouped edges in incremental layout mode. (see com.yworks.yfiles.layout.hierarchic.incremental.IncrementalHintsFactory#createSequenceIncrementallyHint(Object)).
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that may cause an incorrect order of fixed (non-incremental) elements if the layouter is applied in incremental mode and the graph contains sequence constraints.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed possible RangeError that may occur for grouped graphs in incremental mode with recursive group layering enabled.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed possible Error caused by inconsistent grouping.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that may cause edges with zig-zag paths if there are swimlanes and integrated edge labeling is enabled.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter and com.yworks.yfiles.layout.hierarchic.incremental.TopologicalIncrementalLayerer: Fixed bug that may cause unwanted same-layer edges between incremental nodes.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed broken edge routes that may occur for edges with labels if there are "critical" edges, see CRITICAL_EDGE_DPKEY.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed IllegalArgumentException (Graph is not acyclic) in com.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer that could appear when sequence constraints were added to a graph with swimlanes and group nodes.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed IllegalArgumentException in com.yworks.yfiles.layout.hierarchic.incremental.ConstraintIncrementalLayerer that could appear when layer constraints were added in incremental mode.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed broken edge routes that may occur for edges with labels if com.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer's option straightenEdges is enabled.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed rare IllegalArgumentException in com.yworks.yfiles.geom.BorderLine that was caused by numerical instability when using swimlanes.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed minimum edge length for orthogonal edges. It is now also taken into consideration for edges that connect to a node's side and for backloop edges (see backloopRouting).
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed possible RangeError in com.yworks.yfiles.layout.hierarchic.incremental.PCListOptimizer that may appear if there are port constraints which have no matching port candidate or port candidate set entry.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed possible RangeError if com.yworks.yfiles.layout.PortConstraints are used together with com.yworks.yfiles.layout.PortCandidateSets.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed rare bug that caused broken edge routes if edges are routed as polylines.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed IllegalArgumentException that may appear for graphs containing nodes with fixed coordinates.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that caused wrong coordinates of empty rows (see class com.yworks.yfiles.layout.hierarchic.incremental.RowDescriptor) whose minimum height is zero.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed a bug that could result in infinite y-coordinates when octilinear edge routing was enabled.
  • com.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer: fixed bug that disabled label compaction feature.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that caused violations of the minimum first or last segment length for target grouped edges. This only happened when these distances were defined in the default com.yworks.yfiles.layout.router.polyline.EdgeLayoutDescriptor instead of a com.yworks.yfiles.base.DataProvider with individual descriptors.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed side handling of external strong ports.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed rare ReferenceError that may occur for graphs where only a subset of edges is routed, see com.yworks.yfiles.layout.router.polyline.EdgeRouter#sphereOfAction.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed rare ReferenceError that mainly appears if there are overlapping nodes.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that may cause zero length routes of edges whose start and end point are at the same location.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed wrong heuristic bend calculation if grid is used.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Minimum first and last segment length and minimum node to edge distance were sometimes ignored when used together with octilinear routing style.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug in calculation of edge to edge distance penalties which could reduce the space where edges can be routed causing them to take unnecessary long routes.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that caused edges that connect a node with an ancestor group node to violate the minimal node to edge distance for the target node.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that caused edges that connect a node with an ancestor group node to have unnecessary long and bended edge paths when using port constraints.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that caused edges that connect a node with an ancestor group node to cross their source nodes when using port constraints.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that makes it possible to group the source of one edge and the target of another edge at their common node.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that sometimes causes superfluous edge overlaps.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that caused minimum distance violation of grouped edges.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed rare ReferenceError while calculating edge crossing costs.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed possible ReferenceError for edge groups that contain fixed edges.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that caused wrong routes for edges grouped with fixed edges.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that sometimes assumed wrong label bounds for labels of table nodes. This could result in too many bends for edges that were routed around those wrong boxes. Labels of table nodes are now ignored by the router if com.yworks.graph.model.TableLayoutConfigurator is used to prepare the graph for layout calculations.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed bug that sometimes assumed wrong label bounds if the router was used directly after another layout algorithm. This could result in too many bends for edges that were routed around those wrong boxes and/or edges crossing labels because the actual label boxes were ignored.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Fixed possible RangeError for graphs with very short fixed edges.
  • com.yworks.yfiles.layout.router.polyline.PolylineLayoutStage: Fixed possible RangeError if there are fixed edges with a single, very short segment.
  • com.yworks.yfiles.layout.router.BusRouter: Fixed ReferenceError that may appear for graphs containing isolated nodes with self-loops.
  • com.yworks.yfiles.layout.router.BusRouter: Fixed ReferenceError in com.yworks.yfiles.layout.router.BusRepresentations that could appear if the input graph contains overlapping nodes.
  • com.yworks.yfiles.layout.router.BusRouter: Fixed clean up of bends that resulted in unnecessary detours in edge paths.
  • com.yworks.yfiles.layout.router.BusRouter: Fixed possible RangeError.
  • com.yworks.yfiles.layout.router.BusRouter: Fixed possible Error caused by non-orthogonal edge segments.
  • com.yworks.yfiles.layout.router.BusRouter: Fixed possible ReferenceError when routing only a subset of edges without adding a com.yworks.yfiles.base.DataProvider to the graph that marks edges as selected.
  • com.yworks.yfiles.layout.tree.BalloonLayouter: Fixed bug that caused com.yworks.yfiles.layout.tree.BalloonLayouter#CHILD_ORDERING_POLICY_SYMMETRIC not to work as desired.
  • com.yworks.yfiles.layout.tree.AssistantPlacer: fixed placement of assistant nodes. When all children of a node are assistants, they are all placed left/right.
  • Fixed ReferenceError when using com.yworks.yfiles.layout.tree.AssistantPlacer together with distributed port assignment.
  • com.yworks.yfiles.layout.tree.TreeLayouter: Fixed StackOverflowError occurred in trees with high depth.
  • com.yworks.yfiles.layout.tree.TreeLayouter: Fixed bug that may cause a TypeError if the input graph is a com.yworks.yfiles.layout.CopiedLayoutGraph that consists of multiple connected components and the layouter uses the com.yworks.yfiles.layout.tree.LayeredNodePlacer (e.g., if property com.yworks.yfiles.layout.tree.TreeLayouter#childPlacementPolicy is set to com.yworks.yfiles.layout.tree.TreeLayouter#CHILD_PLACEMENT_POLICY_ALL_LEAVES_ON_SAME_LAYER).
  • com.yworks.yfiles.layout.tree.TreeLayouter and com.yworks.yfiles.layout.tree.GenericTreeLayouter: Fixed possible ReferenceError for trees with empty group nodes.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: Fixed root alignments to only take the child node bounds into account without considering edge segments in the subtree.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: Fixed issue that caused too large group nodes when label consideration is enabled and the layout is not oriented top-to-bottom.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: Fixed issue that causes group nodes to be too small to include all edge labels when the edge connects to a child of an inner group node.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: Fixed issue that causes group nodes to be too small for node halos.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: Fixed issue that produces unnecessary large group nodes if node labels are considered.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter: Fixed ReferenceError that occurred when using com.yworks.yfiles.layout.tree.LayeredNodePlacer as default node placer.
  • com.yworks.yfiles.layout.tree.SimpleNodePlacer: Fixed broken edge routes that may appear for edges on nodes with external labels if integrated node labeling is enabled.
  • com.yworks.yfiles.layout.tree.HVTreeLayouter: Fixed bug that may cause edges with reversed direction if the layout isn't run in buffered mode.
  • com.yworks.yfiles.layout.tree.DelegatingNodePlacer: Constants com.yworks.yfiles.layout.tree.DelegatingNodePlacer#VERTICAL and com.yworks.yfiles.layout.tree.DelegatingNodePlacer#HORIZONTAL along with property com.yworks.yfiles.layout.tree.DelegatingNodePlacer#orientation are deprecated since they had no effect.
  • com.yworks.yfiles.layout.tree.DoubleLinePlacer: Fixed the distance between the local root and the upper line to match the specified spacing. The distance between the two lines can now be defined in relation to the spacing.
  • com.yworks.yfiles.layout.tree.TreeReductionStage: Fixed wrong handling of group nodes which may cause a WrongGraphStructure exception as well as broken routes of edges incident to group nodes.
  • com.yworks.yfiles.layout.organic.OrganicLayouter: Fixed bug that caused tree-beautifier feature (see com.yworks.yfiles.layout.organic.OrganicLayouter#activateTreeBeautifier) to have no effect if activated when the graph is actually flat (i.e., there is no group node that contains child nodes) but data providers for groups (see com.yworks.yfiles.layout.grouping.GroupingKeys) are registered with the graph.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Fixed bug that caused weird placement of fixed elements if the minimal node distance is set to 0.
  • com.yworks.yfiles.layout.organic.SplitEdgeLayoutStage: Fixed bug that caused the user's selection for edges that have to be split to be ignored. Also, fixed bug that caused an IllegalArgumentException because of nodes with zero width/height.
  • com.yworks.yfiles.layout.organic.ShuffleLayouter: Fixed bug that may cause small offsets of fixed nodes.
  • com.yworks.yfiles.layout.circular.CircularLayouter: Fixed bug that may cause node overlaps.
  • com.yworks.yfiles.layout.circular.CircularLayouter: Fixed issue that may cause infinite/too large node coordinates for unfavorable input settings, e.g., if the maximal deviation angle is chosen to small (see property maximalDeviationAngle). Note that such coordinates may produce infinite looping or other exceptions.
  • com.yworks.yfiles.layout.circular.CircularLayouter: Fixed possible ReferenceError when layout style is set to BCC_ISOLATED and consider node labels is enabled.
  • com.yworks.yfiles.layout.circular.CircularLayouter fixed bug that caused nodes to be placed outside of the enclosing circle when using layout style SINGLE_CYCLE and partition layout style PARTITION_LAYOUTSTYLE_ORGANIC.
  • com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter: Fixed bug that caused an IllegalArgumentException if data provider key com.yworks.yfiles.layout.PortConstraintKeys#SOURCE_GROUPID_KEY is registered to the input graph but data provider key com.yworks.yfiles.layout.PortConstraintKeys#TARGET_GROUPID_KEY is not registered.
  • com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter: Fixed a bug that sometimes caused misplaced edge labels of grouped edges.
  • com.yworks.yfiles.layout.orthogonal.CompactOrthogonalLayouter: Fixed possible IllegalArgumentException caused by nodes without node IDs. This problem may only appear if the inter edge router is set to com.yworks.yfiles.layout.PartitionLayouter_ChannelInterEdgeRouter.
  • com.yworks.yfiles.layout.multipage.MultiPageLayouter: Fixed ReferenceError that may occur if the edge ID data provider (see com.yworks.yfiles.layout.multipage.MultiPageLayouter#EDGE_ID_DPKEY) is an instance of com.yworks.yfiles.base.EdgeMap.
  • com.yworks.yfiles.layout.multipage.MultiPageLayouter: Fixed bug that may cause non-orthogonal edge routes.
  • com.yworks.yfiles.layout.multipage.MultiPageLayouter: Fixed possible ReferenceError if the input graph contains empty group nodes.
  • com.yworks.yfiles.layout.multipage.MultiPageLayouter: Fixed possible TypeError if group node insets are specified with class com.yworks.bridge.geom.Insets.
  • com.yworks.yfiles.layout.labeling.AbstractLabelingAlgorithm: Fixed bug that may cause removal of labels that don't overlap with other elements if option removeNodeOverlaps is enabled.
  • com.yworks.yfiles.layout.labeling.AbstractLabelingAlgorithm: Fixed bug that causes poor results if option removeEdgeOverlaps is enabled and the labels should be placed on the edge.
  • com.yworks.yfiles.layout.labeling.SALabeling and com.yworks.yfiles.layout.labeling.GreedyMISLabeling: Fixed possible ReferenceError caused by labels with zero width/height and a "free" edge label model.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Fixed bug that may cause broken edge routes for edges incident to incremental group nodes if option routeInterEdgesImmediately is enabled.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Fixed broken edge routes that may appear if option edgeRoutingStrategy is set to EDGE_ROUTING_STRATEGY_OCTILINEAR.
  • com.yworks.yfiles.layout.grouping.FixedGroupLayoutStage: Fixed canLayout(LayoutGraph) which changed the structure and layout of the graph.
  • com.yworks.yfiles.layout.grouping.Grouping: Fixed bug in method getNearestCommonAncestor(Node, Node) that sometimes caused wrong results if one of the specified nodes is the ancestor of the other node.
  • com.yworks.yfiles.layout.grouping.InsetsGroupBoundsCalculator: Fixed method calculateBounds(LayoutGraph, Node, NodeList) to consider only the given child nodes and all edges between those child nodes instead of all nodes and all edges in the graph.
  • com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter: Removed all temporarily inserted port candidates before calling the inter-edge routing because otherwise the edges routes may become corrupted.
  • com.yworks.yfiles.layout.ComponentLayouter: Fixed bug that caused an RangeError if the style is set to com.yworks.yfiles.layout.ComponentLayouter#STYLE_MULTI_ROWS_HEIGHT_CONSTRAINED or com.yworks.yfiles.layout.ComponentLayouter#STYLE_MULTI_ROWS_HEIGHT_CONSTRAINED_COMPACT (see com.yworks.yfiles.layout.ComponentLayouter#style) and all components exceed the preferred height (see com.yworks.yfiles.layout.ComponentLayouter#setPreferredLayoutSize(Number, Number)).
  • com.yworks.yfiles.layout.PortCandidateSet: Fixed bug that caused method com.yworks.yfiles.layout.PortCandidateSet_CandidateMatcher#findMatchingCandidate() to return the entry with the highest cost instead of the lowest cost if the candidate matcher is created with method com.yworks.yfiles.layout.PortCandidateSet#createMatcher().
  • com.yworks.yfiles.layout.CopiedLayoutGraph: Fixed ReferenceError that occurs when nodes or edges are added to the copied graph without removing them before calling commitLayoutToOriginalGraph().
  • com.yworks.yfiles.layout.CopiedLayoutGraph: Fixed problem that may cause movement of label boxes in the original graph even if method com.yworks.yfiles.layout.CopiedLayoutGraph#commitLayoutToOriginalGraph() is not called.
  • com.yworks.yfiles.geom.BorderLine: Fixed bug in method grow(Number, Number, Boolean) that may produce an IllegalArgumentException because the min value of a BorderLine becomes greater than its max value.
  • com.yworks.yfiles.layout.LayoutTool: Fixed calculation of lower width bound in method arrangeRectangleRows(Vector.<Object>, Rectangle2D, Number, int). Due to the better bound, the optimization procedure now needs less steps, especially for graphs with very wide components. Note, that the results may also slightly differ, because the optimization may now stop with slightly different values.
  • com.yworks.yfiles.layout.LabelLayoutDataRefinement: Fixed possible TypeError for unbuffered layout runs.

Incompatible Changes

Behavior Changes

  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Labels of table nodes are no longer ignored by the router if com.yworks.graph.model.TableLayoutConfigurator is used to prepare the graph for layout calculations. If you want to ignore such labels you can use a com.yworks.yfiles.base.DataProvider registered with key com.yworks.yfiles.layout.LabelLayoutKeys#IGNORE_LABEL_KEY.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Method doLayout(LayoutGraph) now throws an IllegalArgumentException if there is a node with zero width or height in the given graph.
  • com.yworks.yfiles.layout.grouping.FixedGroupLayoutStage: Property orthogonalEdgeRouter now returns an instance of class com.yworks.yfiles.layout.router.polyline.EdgeRouter instead of class com.yworks.yfiles.layout.router.OrthogonalEdgeRouter.
  • com.yworks.yfiles.layout.ComponentLayouter: Method setPreferredLayoutSize(Number, Number) now throws an IllegalArgumentException when setting the preferred size to negative values or zero.
  • Changed default behavior of edge label placement in com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter and com.yworks.yfiles.layout.LabelLayoutDataRefinement when using com.yworks.yfiles.layout.PreferredPlacementDescriptor#PLACE_ANYWHERE. Now edge labels are placed on the edge and in the center between source and target node.

API Changes

  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Creating layer constraints (see com.yworks.yfiles.layout.hierarchic.incremental.LayerConstraintFactory) or sequence constraints (see com.yworks.yfiles.layout.hierarchic.incremental.SequenceConstraintFactory) using a disposed of factory now throws an Error.
  • com.yworks.yfiles.layout.hierarchic.incremental.ItemFactory: Added method createRedirectedGroupEdge(Node,Node,Edge).
  • com.yworks.yfiles.layout.labeling.SALabeling and com.yworks.yfiles.layout.labeling.GreedyMISLabeling: Changed com.yworks.yfiles.layout.LabelCandidates default for overlap penalty of nodes and edges from 0 to 1. This means label overlaps are now considered more severe.
  • com.yworks.yfiles.algo.AlgorithmAbortedException: Removed methods check() and check(String). Client code that needs to terminate layout calculations prematurely must use new class com.yworks.yfiles.algo.AbortHandler instead.
  • Moved classes com.yworks.yfiles.layout.grid.PartitionGrid, com.yworks.yfiles.layout.grid.PartitionCellId, com.yworks.yfiles.layout.grid.RowDescriptor, and com.yworks.yfiles.layout.grid.ColumnDescriptor from package com.yworks.yfiles.layout.hierarchic.incremental to package com.yworks.yfiles.layout.grid.
  • com.yworks.yfiles.layout.tree.LayeredNodePlacer: Removed data provider key DP_KEY_DISTANCE_TO_PARENT_MAP from public API, since it is for internal use only.
  • com.yworks.yfiles.layout.router.polyline.PathSearch: Signature of method calculateCosts(CellEntrance, PartitionCell, Vector.<Object>, Vector.<Object>, PathSearchContext, Vector.<Number>, Vector.<Number>) has changed. It now takes an additional Number array as parameter that is populated with the calculated costs instead of returning a new array.
  • com.yworks.yfiles.layout.router.polyline.EdgeRouter: Penalty settings have been changed to double precision. See com.yworks.yfiles.layout.router.polyline.PenaltySettings.
  • com.yworks.yfiles.layout.planar.DrawingEmbedder: Removed public method preprocessNodes(LayoutGraph) and protected method printStatistics().