yFiles FLEX Client Layout Extension Change Log

This file documents the feature enhancements and API changes to previous versions of the yFiles FLEX Client Layout Extension package.

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 Routing Algorithms Other 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
    • 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
    • com.yworks.yfiles.layout.labeling.GreedyMISLabeling
    • com.yworks.yfiles.layout.labeling.SALabeling
    The following layout algorithms also support graceful early termination:
    Layout Algorithms Routing Algorithms Other 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
    • com.yworks.yfiles.layout.router.polyline.EdgeRouter
    • 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 Routing Algorithms Other 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
    • com.yworks.yfiles.layout.router.polyline.EdgeRouter
    • com.yworks.yfiles.layout.SelfLoopLayouter
    • 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().

yFiles FLEX Client Layout Extension 1.4 - changes since 1.3

Major Features Added

Automatic Layout

  • Class com.yworks.yfiles.layout.router.polyline.EdgeRouter is a new edge routing algorithm that produces polyline edge routes. The segments of an edge are either orthogonal (i.e., the slope of each segment is a multiple of 90 degrees) or octilinear (i.e., the slope of each segment is a multiple of 45 degrees).
  • com.yworks.yfiles.layout.router.polyline.PolylineLayoutStage: A layout stage that adds polyline segments to the orthogonal edge paths of a graph.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Added support for octilinear edge routing, i.e., a routing style where the slope of each edge segment is a multiple of 45 degrees. Different edge routing styles can be specified using class com.yworks.yfiles.layout.hierarchic.incremental.RoutingStyle.
  • com.yworks.yfiles.layout.PreferredPlacementDescriptor: A new descriptor that allows to specify advanced preferred placement information for edge labels.

Demos

  • The new PreferredLabelPlacementDemo shows how to configure the PreferredPlacementDescriptor of labels and how this affects the label placement of different layouters.

Minor Features Added

Layout

  • y.layout.tree.DelegatingNodePlacer: Added key com.yworks.yfiles.layout.tree.DelegatingNodePlacer.LEFT_RIGHT_DPKEY that allows choosing on which side a node is placed.
  • com.yworks.yfiles.layout.FixNodeLayoutStage: Added additional fix point policies FIX_POINT_POLICY_UPPER_RIGHT, FIX_POINT_POLICY_LOWER_RIGHT, and FIX_POINT_POLICY_LOWER_LEFT.
  • Added class com.yworks.yfiles.layout.router.StraightLineEdgeRouter that routes edges as straight lines considering specified port constraints.
  • com.yworks.yfiles.layout.tree.BalloonLayouter: New option to take into account the bounds of node labels when calculating a layout.

Improvements

Layout and Algorithms

  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Selfloop routing now takes the layout flow into account. For layout orientation top-to-bottom, selfloops will by default exit on the left or right and enter on top.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Added option to route selfloops like backloops (starting at the bottom of the node and ending at the top of the node) when backloop routing is enabled.
  • com.yworks.yfiles.layout.tree.BalloonLayouter: Reduced gaps between adjacent nodes.
  • com.yworks.yfiles.layout.circular.CircularLayouter: Improved results for "from sketch" mode.
  • com.yworks.yfiles.algo.Trees: Added method isForest(y.base.Graph, boolean).
  • com.yworks.yfiles.algo.GraphConnectivity: Improved method makeBiconnected(com.yworks.yfiles.base.Graph) to work with graphs with self-loops (i.e. edges whose source node is also the target node).
  • com.yworks.yfiles.algo.Groups: Replaced recursive implementation of method biconnectedComponentGrouping(com.yworks.yfiles.baseGraph, com.yworks.yfiles.baseNodeMap) with an iterative algorithm to support larger graphs.
  • Improved the performance of com.yworks.yfiles.layout.PortCandidate which potentially improves the performance of the com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter with rotated graphs with PortCandidates.
  • com.yworks.yfiles.layout.GraphLayoutLineWrapper: Improved edge routing for overlapping edges (e.g., grouped edges).
  • com.yworks.yfiles.layout.hierarchic.incremental.HierarchicLayouter now treats edge groups at empty group nodes like those on normal nodes instead of ignoring them like it is done for non-empty group nodes.
  • com.yworks.yfiles.layout.LabelLayoutTranslator added option autoFlippingEnabled to specify whether or not edge labels should be automatically flipped if they would be upside-down.
  • com.yworks.yfiles.layout.labeling.AbstractLabelingAlgorithm added option autoFlippingEnabled to specify whether or not edge labels associated with a "free" label model should be automatically flipped if they would be upside-down.
  • com.yworks.yfiles.layout.tree.GenericTreeLayouter creates more compact layouts, especially for trees with edge labels.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Now considers edge ports when calculating the barycenter of a component (if positioningStrategy is set to SUBGRAPH_POSITIONING_STRATEGY_BARYCENTER
  • Added auto-flipping to com.yworks.yfiles.layout.RotatedDiscreteEdgeLabelModel and com.yworks.yfiles.layout.RotatedSliderEdgeLabelModel. Labels that are placed upside down by a layouter will be flipped.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Now, fixed nodes are not moved by a fixed offset if scope is set to SCOPE_SUBSET.
  • Optimized number of generated com.yworks.yfiles.layout.PortCandidates in com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter for the core layouter.
  • com.yworks.yfiles.layout.hierarchic.WeightedLayerer: Improved quality (i.e., reduced the number of reversed edges) if weightedCycleRemoval is enabled.
  • Added the ability to com.yworks.yfiles.layout.tree.DefaultNodePlacer to produce polyline style edge routings with sloped edge segments.
  • Added the ability to com.yworks.yfiles.layout.tree.DefaultPortAssignment to distribute edges at the border of the nodes.

Demos

  • Added an octilinear edge routing option to the hierarchic module of the LayoutModuleDemo.

Bugfixes

Layout

  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Minimum first and last segment length settings were sometimes ignored when used together with edge grouping or group nodes.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Minimum edge length is now respected for edges that cross several layers, too.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that may cause broken edge routes for edges with port candidates if backloop routing is enabled (see option setBackloopRoutingEnabled(boolean)).
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that resulted in unsuitable edge routes for grouped edges within group nodes.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed bug that resulted in a violation of strong port constraints of type ANY_SIDE for backloop edges.
  • com.yworks.yfiles.layout.hierarchic.incremental.PartitionGridLayoutStage: Fixed NullPointerException for unbuffered layout runs on graphs with group nodes.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Improved results for scope SCOPE_SUBSET and SCOPE_MAINLY_SUBSET (see method setScope(byte)) when only few nodes are marked in the subset to be laid out (see NODE_SUBSET_DATA).
  • com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter: Fixed RuntimeException that may appear for graphs with nodes of high degree.
  • com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter: Fixed bug that may cause wrong group bounds calculation if a group node label lies outside of the group node.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Fixed possible NullPointerException if the algorithm is applied to a graph with partition grid (see com.yworks.yfiles.layout.hierarchic.incremental.PartitionGrid).
  • com.yworks.yfiles.layout.partial.PartialLayouter: Fixed bug that may cause very long runtime if the algorithm considers node alignment (see option considerNodeAlignment).
  • com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter: Fixed IllegalStateException that may appear if there are edges that start/end at group nodes.
  • com.yworks.yfiles.layout.LayoutTool: Fixed bug in method routeEdgesParallel(com.yworks.yfiles.layoutLayoutGraph, com.yworks.yfiles.baseEdge, com.yworks.yfiles.baseEdge, Number, boolean, Number, Number) that may cause points with Double.NaN-coordinates for some edges.
  • com.yworks.yfiles.layout.ParallelEdgeLayouter: Fixed NullPointerException that appears if the leading edge has zero length.
  • com.yworks.yfiles.layout.ParallelEdgeLayouter: Fixed bug that may cause points with Double.NaN-coordinates for some edges.
  • com.yworks.yfiles.layout.router.BusRouter: Fixed possible StackOverflowError.
  • com.yworks.yfiles.layout.router.BusRouter: Fixed bug that may cause a broken bus structure.
  • com.yworks.yfiles.layout.router.OrthogonalEdgeRouter: Fixed rare TypeError which may appear if monotonic path restrictions are specified.
  • com.yworks.yfiles.layout.router.OrthogonalEdgeRouter: Fixed NullPointerException that may appear when both options rerouting and localCrossingMinimization are enabled.
  • com.yworks.yfiles.layout.ParallelEdgeLayouter: Fixed TypeError which may appear when source/target points of parallel edges are outside of the corresponding node.
  • com.yworks.yfiles.layout.router.GroupNodeRouterStage: Fixed possible TypeError that was caused by missing removal of a temporary added DataProvider.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Reduced cases where the result contains overlapping node elements.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Improved edge routing for edges between fixed elements as well as for cases where option routeInterEdgesImmediately is enabled.
  • com.yworks.yfiles.layout.partial.PartialLayouter: Fixed RangeError that could occur for large graphs.
  • com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter: Fixed bug that increased the runtime for mainly flat graph structures.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Fixed problem that sometimes caused very long runtime for simple grouped graphs.
  • com.yworks.yfiles.layout.transformer.GraphTransformer: Fixed group nodes bounds after transforming a sub-graph only.
  • com.yworks.yfiles.layout.organic.SmartOrganicLayouter: Fixed wrong calculation of group node sizes if option considerNodeLabels is enabled.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed incorrect handling of port candidates in layouts where rotation and a mirror was set.
  • com.yworks.yfiles.geom.YVector: Fixed rotate(Number) to no longer return vertically mirrored results.
  • com.yworks.yfiles.layout.RotatedSliderEdgeLabelModel and com.yworks.yfiles.layout.SliderEdgeLabelModel: Improved label placement at zero-length edge segments.
  • com.yworks.yfiles.geom.OrientedRectangle: Fixed intersectionPoint(OrientedRectangle, LineSegment, Number) that calculated sometimes wrong intersection points.
  • Fixed a bug in com.yworks.yfiles.layout.hierarchic.incremental.AspectRatioComponentLayerer.
  • Fixed integer overflow when group compaction is activated in com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter while layouting extremely large, deeply nested graphs.
  • com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter supports labels at edges adjacent to group nodes.
  • Fixed bad edge routings in com.yworks.yfiles.layout.genealogy.FamilyTreeLayouter when there are several marriages between generations.
  • com.yworks.yfiles.layout.grouping.IsolatedGroupComponentLayouter now considers labels in group bounds calculation if label awareness is enabled.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed port handling of edges with a single edge port candidate that is contained in a set of node port candidates.
  • com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter and com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter: Fixed bug that caused ArgumentException if input graph contains overlapping parallel edges and from sketch mode is enabled (see the useSketchDrawing property).

Incompatible Changes

  • Changed default behavior of edge label placement in layouters with integrated edge labeling 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. This change affects the following layout algorithms: com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter, com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter, com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter, com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter, and com.yworks.yfiles.layout.tree.GenericTreeLayouter.
  • com.yworks.yfiles.layout.EdgeLabelLayout: Removed property preferredPlacement and added property preferredPlacementDescriptor
  • com.yworks.yfiles.layout.partial.PartialLayouter: Replaced method configureOrthogonalEdgeRouter(OrthogonalEdgeRouter) by method configureEdgeRouter(Layouter).
  • com.yworks.yfiles.layout.partial.PartialLayouter: property edgeRoutingStrategy now disables a previously set customized edge router.

yFiles FLEX Client Layout Extension 1.3 - changes since 1.2.0.1

General

  • Minimum required yFiles FLEX version is now 1.7.
  • The Flex 3 compatible demos are no longer provided.

Major Features Added

Automatic Layout

  • Class com.yworks.yfiles.layout.multipage.MultiPageLayouter is a new layout algorithm that breaks apart a given graph into a set of smaller graphs so that each layout of a small graph fits into a given width and height.
    The MultiPageLayoutDemo shows how to use class MultiPageLayouter to sub-divide large graphs into smaller bits of navigable information.
  • Class com.yworks.graph.model.TableLayoutConfigurator correctly configures a PartitionGrid information from a given table (com.yworks.graph.model.ITable) configuration. Class com.yworks.graph.model.LayoutExecutor internally delegates to a TableLayoutConfigurator to support ITable.

Minor Features Added

Automatic Layout

  • In com.yworks.yfiles.algo.Cycles the method findAllCycleEdges has been improved to return only edges that belong to at least one simple cycle. Previously, all edges were returned for the undirected case.
  • The method shortestPair has been added to com.yworks.yfiles.algo.ShortestPaths.
  • The orthogonal layout algorithms com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter (OL), com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter (OGL), and com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter (DOL) now support specifying a minimum first/last segment length. See the descriptions of EDGE_LAYOUT_DESCRIPTOR_DPKEY of the corresponding layouter.
  • To com.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer an algorithm has been added that reduces the number of bends. This option can be set using method setBendReductionEnabled and is enabled by default. Note: using this option increases the runtime of the com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter. If the runtime exceeds the maximal duration, the number of bends is not reduced.
  • Added abstract class com.yworks.yfiles.layout.hierarchic.incremental.AbstractPortConstraintOptimizer, a partial implementation of interface com.yworks.yfiles.layout.hierarchic.incremental.PortConstraintOptimizer, to minimize the effort required to modify the port assignment after the sequencing phase of a hierarchic layout.
  • Extended com.yworks.yfiles.layout.organic.InteractiveOrganicLayouter with a single threaded mode.
    The new InteractiveOrganicLayouterDemo shows how to perform interactive layout updates with class InteractiveOrganicLayouter.
  • In com.yworks.yfiles.layout.tree.TreeLayouter when using port styles BORDER_CENTER_PORTS and BORDER_DISTRIBUTED_PORTS together with child placement policies CHILD_PLACEMENT_POLICY_LEAVES_STACKED, CHILD_PLACEMENT_POLICY_LEAVES_STACKED_LEFT, CHILD_PLACEMENT_POLICY_LEAVES_STACKED_RIGHT, and CHILD_PLACEMENT_POLICY_LEAVES_STACKED_LEFT_AND_RIGHT, edges are connect to the appropriate sides of their target nodes instead of to the top. Moreover, the order of outgoing edges no longer results in crossings for port style BORDER_DISTRIBUTED_PORTS
  • In com.yworks.yfiles.layout.labeling.AbstractLabelingAlgorithm the DataProvider key LABEL_MODEL_DPKEY has been added that can be used to temporarily specify the model of labels that is used by the labeling algorithm.

Improvements

Automatic Layout

  • com.yworks.yfiles.layout.genealogy.FamilyTreeLayouter was improved with respect to the number of edge crossings.
  • In com.yworks.yfiles.layout.hierarchic.incremental.PCListOptimizer the handling of port candidates and enhanced backloop routing support has been improved.
  • Improved the performance of com.yworks.yfiles.layout.PortCandidate which potentially improves the performance of the com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter with rotated graphs with PortCandidates.

Bugfixes

  • Fixed methods in com.yworks.yfiles.algo.GraphConnectivity that calculate biconnected components to mark selfloops as not belonging to any biconnected component.
  • Fixed possible NullPointerException in method biconnectedComponentGrouping of com.yworks.yfiles.algo.Groups when calculating biconnected components in a graph containing self-loops.
  • In com.yworks.yfiles.algo.Groups the parameters minGroupCount and maxGroupCount of method edgeBetweennessClustering had no effect.
  • Fixed an error in method findShortestUniformPaths of com.yworks.yfiles.algo.ShortestPaths. In many cases, nodes and edges which did not belong to a shortest path were added to the result nevertheless.
  • Fixed method rotate in com.yworks.yfiles.geom.YVector to no longer return vertically mirrored results.
  • Fixed NullPointerException that happened for the rare case of registering a com.yworks.yfiles.layout.hierarchic.incremental.PartitionGrid but not assigning any nodes to grid cells.
  • com.yworks.yfiles.layout.hierarchic.incremental.TopLevelGroupToSwimlaneStage now respects the minimum sizes of top-level groups.
  • Fixed bug in com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter that caused that the options "backloop routing" and "automatic edge grouping" were ignored.
  • Fixed bug in com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter that caused superfluous crossings for orthogonal edges attached to the same port.
  • Fixed incorrect handling of port candidates in com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter in layouts where rotation and a mirror was set.
  • Fixed UnsupportedOperationException that was triggered when using a generic labeling algorithm (i.e. a subclass of com.yworks.yfiles.layout.labeling.AbstractLabelingAlgorithm) together with layout stage com.yworks.yfiles.layout.LabelLayoutDataRefinement
  • Fixed strong port constraints for orthogonally routed inter-edges in com.yworks.yfiles.layout.partial.PartialLayouter .
  • Fixed a bug in com.yworks.yfiles.layout.partial.PartialLayouter that caused a very long runtime if the layout orientation is not equal to ORIENTATION_NONE and option setConsiderNodeAlignment is enabled.
  • Fixed bug in com.yworks.yfiles.layout.router.EdgeGroupRouterStage that caused broken edge grouping when specifying edge group IDs on both endpoints of an edge.
  • Fixed bug in com.yworks.yfiles.layout.router.EdgeGroupRouterStage that caused violation of edge grouping constraints as well as port constraints.
  • Fixed bug in com.yworks.yfiles.layout.router.GroupNodeRouterStage that caused a broken graph structure for graphs containing groups with self-loops.
  • Fixed bug in com.yworks.yfiles.layout.tree.BusPlacer that sometimes caused exceptions due to rounding errors.

yFiles FLEX Client Layout Extension 1.2.0.1 - changes since 1.2

Bugfixes

  • Fixed a bug which could break routing with the com.yworks.yfiles.layout.router.BusRouter.

yFiles FLEX Client Layout Extension 1.2 - changes since 1.1

General

  • Minimum required yFiles FLEX version is now 1.6.

Major Features Added

Automatic Layout

  • New support for rotated labels (e.g. using the com.yworks.graph.model.RotatedSliderEdgeLabelModel or the com.yworks.graph.model.RotatedSideSliderEdgeLabelModel introduced in yFiles FLEX 1.6) in the generic labeling algorithms.
  • com.yworks.yfiles.layout.partial.PartialLayouter: A new layout algorithm for partial layouts. This layout algorithm changes the coordinates for a given set of graph elements (called partial elements). The location or size of the remaining elements (called fixed elements) is not allowed to change. The layout algorithm aims to place the partial elements such that the resulting drawing (including the fixed elements) has a good quality with respect to common graph drawing aesthetics.
  • com.yworks.yfiles.layout.router.BusRouter: A new orthogonal bus-style edge routing algorithm. This algorithm combines the large number of edges of complete subgraphs in a concise, tree-like structure that consists only of vertical and horizontal line segments. The positions of the nodes in a graph are not altered by this algorithm.
  • com.yworks.yfiles.layout.router.OrthogonalEdgeRouter: Added support for monotonic path restrictions. Such restrictions specify that edges should be routed monotonically in vertical and/or horizontal direction. The restrictions can be set with property monotonicPathRestriction.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Added DataProvider key CRITICAL_EDGE_DPKEY that allows to specify a priority value for edges that are part of critical paths. The layouter tries to vertically align each node pair that is connected by such a "critical" edge (an edge that has a non-zero, positive priority value). Conflicts between different critical edges are resolved in favor of the higher priority.
  • com.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer: Added option straightenEdges which allows to specify whether or not a postprocessing step should be applied that tries to remove some bends. Enabling this option may violate some minimum distances specified by the user.
  • com.yworks.yfiles.layout.router.OrthogonalEdgeRouter: Added support for PortCandidateSets that allow to specify the available port candidates at a node.

Minor Features Added

Automatic Layout

  • New layout stage class com.yworks.yfiles.layout.router.PartitionGridRouterStage enables com.yworks.yfiles.layout.router.OrthogonalEdgeRouter to properly route edges within a partition grid.
  • com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter: Added DataProvider key GROUP_NODE_LAYOUTER_DPKEY that allows an easier way to specify the layout algorithm used for recursive group nodes. Furthermore, it allows to specify non-recursive group nodes, i.e., group nodes whose contents are laid out using the Layouter instance specified by the nearest predecessor of the group node (with respect to the grouping hierarchy) which is associated with a layouter.
  • com.yworks.yfiles.layout.tree.TreeLayouter: Added new support for child placement policies that can be used to achieve more compact tree layouts: property childPlacementPolicy.
  • com.yworks.yfiles.layout.tree.TreeLayouter: Added new global layering option that ensures that large nodes never span more than their layer: property enforceGlobalLayering.
  • com.yworks.yfiles.layout.router.OrthogonalEdgeRouter: Added support for considering node labels, property considerNodeLabels.
  • com.yworks.yfiles.layout.circular.CircularLayouter: Added DataProvider key CIRCLE_ID_HOLDER_DPKEY that allows to obtain a mapping between nodes and the corresponding circle IDs.
  • com.yworks.yfiles.layout.router.OrthogonalEdgeRouter: Added new routing style STYLE_BALANCED which is based on the existing STYLE_PREFERMIDDLE but draws segments between bends of the same direction (U-style turns) the short way.

Graph Model

  • Added the concept of label candidate descriptors which provide additional properties for label candidates and are used by some automatic labeling algorithms.

Improvements

  • New utility class com.yworks.graph.model.LayoutCompat added that facilitates layout specific tasks like creating layer or sequence constraints.
  • Utility methods flashOrientedRectangleToYOrientedRectangle() and yOrientedRectangleToFlashOrientedRectangle() have been added to com.yworks.geom.util.GeomConvert.
  • Class com.yworks.graph.model.LayoutGraphAdapter now automatically provides the node and edge id provider registered on the original IGraph with the keys com.yworks.graph.model.DefaultGraph.MAPPER_KEY_NODE_2_ID and com.yworks.graph.model.DefaultGraph.MAPPER_KEY_NODE_2_ID as DataProvider with the keys com.yworks.yfiles.layout.LayouterKeys.NODE_ID_DPKEY and com.yworks.yfiles.layout.LayouterKeys.EDGE_ID_DPKEY. This allows to use the default ids when configuring layouters, e.g. using layer or sequence constraints.
  • The new utility class com.yworks.graph.model.NodeHierarchy allows comfortable access to and manipulation from the graph hierarchy of a com.yworks.yfiles.layout.LayoutGraph, e.g. when using a custom com.yworks.yfiles.layout.LayoutStage.
  • The methods getInt, getDouble and getBool of com.yworks.graph.model.DataProviderAdapter are now more tolerant with the mapped values and convert the looked up value to the corresponding type instead of simply casting them to the type. This way e.g. getInt for a mapped String value "2" will return 2 instead of 0.
  • The new class com.yworks.graph.model.ConstantMapper is a simple com.yworks.support.IMapper implementation that provides a single value for all keys.
  • In com.yworks.yfiles.layout.router.BusRepresentations the methods to transform from and to hub representation can now copy data which is attached to an original edge using specific data provider keys to the corresponding edge in the transformed graph.

Demos

  • The default font family for most of the demos has been changed to Verdana.
  • The new BusinessProcessDiagramDemo showcases how to customize diverse editing features to create a BPMN editor that is based on an according business model. The pools and swim lanes can be laid out using the com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter in combination with a com.yworks.yfiles.layout.hierarchic.incremental.PartitionGrid.
  • The new EdgeLabelingDemo shows how to configure different edge label models as well as how to apply the generic edge labeling algorithm.
  • New LayerConstraintsDemo and new SequenceConstraintsDemo show how to apply layer constraints and sequence constraints to the com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter.
  • The new LayoutModuleDemo allows to quickly test the different settings for the most important layout algorithms.
  • The new PortCandidateDemo shows how to use port candidates to restrict the positions of the ports (connection points). The new LogicGateDemo demonstrates the use of port candidates to keep the locations of the current ports.
  • The new SimpleIncrementalHierarchicLayouterDemo demonstrates how to incrementally layout parts of a graph using incremental hints.
  • The new SwimlaneDemo shows how to configure and visualize swim lanes.
  • The new PartialLayoutDemo shows how to use the com.yworks.yfiles.layout.PartitionLayouter to embed new graph elements into an existing layout. Different scenarios for hierarchic, orthogonal, organic and circular use cases demonstrate suitable settings for these layout styles.
  • The new MixedLayoutDemo shows how to use the recursive group layouter to apply different layouts to the contents of group nodes.
  • The new TemplateStyleDemo shows how to use the template styles with so-called "user tags" in order to create custom data visualizations. In addition, the demo shows how the custom data objects can be serialized with the GraphML I/O framework.
  • The OrgChart demo now uses a bigger graph and the local view mode on startup.
  • The new NavigationDemo shows how to display the neighborhood of a selected node in a complex graph.
  • The new GenericTreeLayouterDemo shows the different NodePlacer implementations for the com.yworks.yfiles.layout.tree.GenericTreeLayouter. A NodePlacer can be assigned to a node and determines how the node and its sub trees shall be arranged by the layouter.
  • The demo.components.IconButton can now be used with scalable icons like SVG.

Bugfixes

  • Fixed a bug in com.yworks.graph.anim.LayoutMorpherWrapper which caused ports to change their location model if more than one edge connected to them.
  • com.yworks.yfiles.layout.ComponentLayouter: Fixed bug that caused a wrong component assignment if customized component IDs are used.
  • Fixed a bug in com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter that caused unnecessary crossings when using node grouping.
  • Fixed a bug in com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter that sometimes caused an assignment of infinite coordinates to group nodes as well as to points of edges incident to group nodes.
  • Fixed a bug in com.yworks.yfiles.algo.NetworkFlows that caused wrong calculation of the cut set returned by method calcMaxFlowMinCut().
  • Added missing parent node information when copying grouped graphs with com.yworks.yfiles.layout.LayoutGraphCopyFactory.
  • Fixed a NullPointerException in com.yworks.yfiles.layout.planar.DrawingEmbedder caused by nodes having the same center.
  • Fixed a potential stack overflow in com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter which could occur when useSketchDrawing was enabled.
  • Fixed a bug in com.yworks.yfiles.layout.tree.BusPlacer that sometimes caused exceptions due to rounding errors.

yFiles FLEX Client Layout Extension 1.1 - changes since 1.0.0.1

General

  • Ensured compatibility with yFiles FLEX 1.4 and 1.5.

Demos

  • Changed classes demo.incrementalHierarchicLayouter.ArrowHandle and demo.incrementalHierarchicLayouter.LayerHighlightPositionHandler to be compatible with yFiles FLEX 1.5 (interfaces IHandle and IPositionHandler changed).

Bugfixes

  • Fixed a bug which could break label layout with some label models.
  • com.yworks.yfiles.layout.ComponentLayouter: Fixed bug that caused a wrong component assignment if customized component IDs are used.
  • com.yworks.yfiles.view.hierarchy.HierarchyTreeModel: Fixed memory leak. Nodes were stored in the model's internal nesting data structure even after they were removed from their graph.
  • Improved label post-processing in generic label placement algorithms.
  • com.yworks.yfiles.layout.ComponentLayouter: Fixed bug that sometimes caused an IndexOutOfBoundsException if the style was set to a "packed"-style.
  • com.yworks.yfiles.layout.hierarchic.AsIsLayerer: Fixed layer assignment bug that occurred when there was a very large first node.
  • com.yworks.yfiles.layout.hierarchic.AsIsLayerer: Fixed property minimumNodeSize to throw an IllegalArgumentException if a value less than 0 was set.
  • com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter: Fixed property fromScratchLayeringStrategy. This method erroneously returned the fixed elements layering strategy.
  • Fixed regression that affected sequencing results when using sequence constraints in hierarchical layouts.
  • com.yworks.yfiles.layout.hierarchic.incremental.ConstraintIncrementalLayerer: Fixed layer assignment for multiple graph components.
  • com.yworks.yfiles.layout.hierarchic.incremental.DefaultLayerSequencer: Fixed potential memory leak.

yFiles FLEX Client Layout Extension 1.0.0.1 - changes since 1.0

Bugfixes

  • Fixed a bug in com.yworks.graph.model.LayoutGraphAdapter which caused an exception when a node or edge had more than one label.