Change log
yFiles FLEX Client Layout Extension
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 (seestop()
) and immediate termination (seecancel()
).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. Seecom.yworks.yfiles.layout.grid.PartitionGrid
.
Minor Features Added
Layout
com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: Added support for incremental group nodes (seecom.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. Seecom.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 propertyuseLabelCompaction
.com.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer
: Added optionuseNodeCompaction
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
andcom.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 incom.yworks.yfiles.layout.tree.DefaultNodePlacer
,com.yworks.yfiles.layout.tree.DendrogramPlacer
,com.yworks.yfiles.layout.tree.SimpleNodePlacer
,com.yworks.yfiles.layout.tree.LayeredNodePlacer
andcom.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 incom.yworks.yfiles.layout.tree.DefaultPortAssignment
. Grouped edges will share the same port location at local root.com.yworks.yfiles.layout.tree.GenericTreeLayouter
: When enablingcom.yworks.yfiles.layout.tree.GenericTreeLayouter#integratedNodeLabeling
and/orcom.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 allowscom.yworks.yfiles.layout.tree.GenericTreeLayouter
to place siblings into different groups. com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter
: Added optioninterEdgeRouter
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 bycom.yworks.yfiles.layout.PortConstraint
s orcom.yworks.yfiles.layout.PortCandidate
s after calling the core layout. com.yworks.yfiles.layout.tree.BalloonLayouter
: Added support for integrated node and edge labeling. See new propertiesintegratedEdgeLabelingEnabled
,integratedNodeLabelingEnabled
, andnodeLabelingPolicy
.com.yworks.yfiles.layout.tree.BalloonLayouter
: Added support for different policies to align nodes having the same root node. See new propertychildAlignmentPolicy
.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 propertyinterleavedMode
.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 keycom.yworks.yfiles.layout.router.polyline.EdgeRouter#LABEL_CROSSING_COST_FACTOR_DPKEY
.com.yworks.yfiles.layout.router.polyline.EdgeRouter
: Added optionignoreInnerNodeLabelsEnabled
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 propertyedgeOrderComparator
.com.yworks.yfiles.layout.partial.PartialLayouter
: Now supports handling of directed and undirected edges; see data provider keyDIRECTED_EDGES_DPKEY
.com.yworks.yfiles.layout.LabelLayoutTranslator
: Added propertieswriteBackRelativeEdgeLabelLocationEnabled
andwriteBackRelativeNodeLabelLocationEnabled
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 keyIGNORE_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 classcom.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 methodcancel()
that can be used by subclasses to cancel the search.com.yworks.yfiles.algo.Cycles
: Improved methodfindCycle(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, seecom.yworks.yfiles.layout.hierarchic.incremental.SequenceConstraintFactory#addPlaceNodeAtTailConstraint(Object)
andcom.yworks.yfiles.layout.hierarchic.incremental.SequenceConstraintFactory#addPlaceNodeAtHeadConstraint(Object)
.com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: The group transposition feature (seecom.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 edgescom.yworks.yfiles.layout.hierarchic.incremental.LayoutDataProvider#getEdgeData(Edge)
now returns ancom.yworks.yfiles.layout.hierarchic.incremental.EdgeData
of the new typecom.yworks.yfiles.layout.hierarchic.incremental.EdgeData#TYPE_REDIRECTED_GROUP_EDGE
.com.yworks.yfiles.layout.hierarchic.incremental.PCListOptimizer
: Improved port candidate assignment calculated by methodoptimizeAfterSequencing(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 optiongroupNodeCompactness
) if optionnodeEdgeOverlapAvoided
is enabled.com.yworks.yfiles.layout.organic.SmartOrganicLayouter
: Improved node overlap removal (see optionnodeOverlapsAllowed
). Now, if the scope is set toSCOPE_SUBSET
orSCOPE_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 toSCOPE_ALL
and the quality to time ratio (seequalityTimeRatio
) is greater than or equal to0.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
andcom.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 (seecoreLayouter)
) 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
andcom.yworks.yfiles.layout.labeling.GreedyMISLabeling
: Both algorithms now also consider the node/edge overlap penalty specified by acom.yworks.yfiles.layout.LabelCandidate
.- Improved performance - especially for large graph instances - of generic labeling algorithms
com.yworks.yfiles.layout.labeling.GreedyMISLabeling
andcom.yworks.yfiles.layout.labeling.SALabeling
. com.yworks.yfiles.layout.PartitionLayouter
: Added nested classcom.yworks.yfiles.layout.PartitionLayouter_PolylineInterEdgeRouter
that routes inter-edges using classcom.yworks.yfiles.layout.router.polyline.EdgeRouter
.com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter
: Added optionreplacePortConstraints
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. Seecom.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. Seecom.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
, andcom.yworks.yfiles.layout.router.polyline.PenaltySettings#OPTIMIZATION_EDGE_LENGTHS
.com.yworks.yfiles.layout.router.ChannelRouter
: Improved performance.com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter
andcom.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter
: Added optimization step that reduces the number of perceived bends. See new propertyperceivedBendsOptimization
.com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter
: Improved performance.com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter
,com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter
andcom.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 propertyalignDegreeOneNodes
.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 methodarrangeRectangleMultiRowsWithAlignment(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 strategiesSTYLE_MULTI_ROWS
,STYLE_MULTI_ROWS_COMPACT
,STYLE_MULTI_ROWS_HEIGHT_CONSTRAINED
,STYLE_MULTI_ROWS_HEIGHT_CONSTRAINED_COMPACT
,STYLE_MULTI_ROWS_WIDTH_CONSTRAINED
, andSTYLE_MULTI_ROWS_WIDTH_CONSTRAINED_COMPACT
suitable for components with highly different sizes.
Bugfixes
Algorithm
com.yworks.yfiles.algo.Trees
: fixed methodgetCenterRoot(Graph)
that didn't always return the correct center node of a tree.com.yworks.yfiles.algo.ShortestPaths
: FixedReferenceError
that occurred when applying the Dijkstra or Bellman-Ford algorithm to an empty graph.
Layout
com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: FixedError
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 (seecom.yworks.yfiles.layout.hierarchic.incremental.IncrementalHintsFactory#createIncrementalGroupHint(Object)
) depends on the group's location if recursive layering is enabled (seecom.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
: FixedReferenceError
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)
orcom.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 forcom.yworks.yfiles.layout.hierarchic.incremental.Layerer
,com.yworks.yfiles.layout.hierarchic.incremental.Sequencer
andcom.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
: FixedReferenceError
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
andcom.yworks.yfiles.algo.RankAssignments
: Fixed possibleReferenceError
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 rareError
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. (seecom.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 possibleRangeError
that may occur for grouped graphs in incremental mode with recursive group layering enabled.com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: Fixed possibleError
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
andcom.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, seeCRITICAL_EDGE_DPKEY
.com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: FixedIllegalArgumentException
(Graph is not acyclic) incom.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
: FixedIllegalArgumentException
incom.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 ifcom.yworks.yfiles.layout.hierarchic.incremental.SimplexNodePlacer
's optionstraightenEdges
is enabled.com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: Fixed rareIllegalArgumentException
incom.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 (seebackloopRouting
).com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: Fixed possibleRangeError
incom.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 possibleRangeError
ifcom.yworks.yfiles.layout.PortConstraint
s are used together withcom.yworks.yfiles.layout.PortCandidateSet
s.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
: FixedIllegalArgumentException
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 classcom.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 defaultcom.yworks.yfiles.layout.router.polyline.EdgeLayoutDescriptor
instead of acom.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 rareReferenceError
that may occur for graphs where only a subset of edges is routed, seecom.yworks.yfiles.layout.router.polyline.EdgeRouter#sphereOfAction
.com.yworks.yfiles.layout.router.polyline.EdgeRouter
: Fixed rareReferenceError
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 rareReferenceError
while calculating edge crossing costs.com.yworks.yfiles.layout.router.polyline.EdgeRouter
: Fixed possibleReferenceError
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 ifcom.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 possibleRangeError
for graphs with very short fixed edges.com.yworks.yfiles.layout.router.polyline.PolylineLayoutStage
: Fixed possibleRangeError
if there are fixed edges with a single, very short segment.com.yworks.yfiles.layout.router.BusRouter
: FixedReferenceError
that may appear for graphs containing isolated nodes with self-loops.com.yworks.yfiles.layout.router.BusRouter
: FixedReferenceError
incom.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 possibleRangeError
.com.yworks.yfiles.layout.router.BusRouter
: Fixed possibleError
caused by non-orthogonal edge segments.com.yworks.yfiles.layout.router.BusRouter
: Fixed possibleReferenceError
when routing only a subset of edges without adding acom.yworks.yfiles.base.DataProvider
to the graph that marks edges as selected.com.yworks.yfiles.layout.tree.BalloonLayouter
: Fixed bug that causedcom.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 usingcom.yworks.yfiles.layout.tree.AssistantPlacer
together with distributed port assignment. com.yworks.yfiles.layout.tree.TreeLayouter
: FixedStackOverflowError
occurred in trees with high depth.com.yworks.yfiles.layout.tree.TreeLayouter
: Fixed bug that may cause aTypeError
if the input graph is acom.yworks.yfiles.layout.CopiedLayoutGraph
that consists of multiple connected components and the layouter uses thecom.yworks.yfiles.layout.tree.LayeredNodePlacer
(e.g., if propertycom.yworks.yfiles.layout.tree.TreeLayouter#childPlacementPolicy
is set tocom.yworks.yfiles.layout.tree.TreeLayouter#CHILD_PLACEMENT_POLICY_ALL_LEAVES_ON_SAME_LAYER
).com.yworks.yfiles.layout.tree.TreeLayouter
andcom.yworks.yfiles.layout.tree.GenericTreeLayouter
: Fixed possibleReferenceError
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
: FixedReferenceError
that occurred when usingcom.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
: Constantscom.yworks.yfiles.layout.tree.DelegatingNodePlacer#VERTICAL
andcom.yworks.yfiles.layout.tree.DelegatingNodePlacer#HORIZONTAL
along with propertycom.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 aWrongGraphStructure
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 (seecom.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 (seecom.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 anIllegalArgumentException
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 propertymaximalDeviationAngle
). Note that such coordinates may produce infinite looping or other exceptions.com.yworks.yfiles.layout.circular.CircularLayouter
: Fixed possibleReferenceError
when layout style is set toBCC_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 styleSINGLE_CYCLE
and partition layout stylePARTITION_LAYOUTSTYLE_ORGANIC
.com.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter
: Fixed bug that caused anIllegalArgumentException
if data provider keycom.yworks.yfiles.layout.PortConstraintKeys#SOURCE_GROUPID_KEY
is registered to the input graph but data provider keycom.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 possibleIllegalArgumentException
caused by nodes without node IDs. This problem may only appear if the inter edge router is set tocom.yworks.yfiles.layout.PartitionLayouter_ChannelInterEdgeRouter
.com.yworks.yfiles.layout.multipage.MultiPageLayouter
: FixedReferenceError
that may occur if the edge ID data provider (seecom.yworks.yfiles.layout.multipage.MultiPageLayouter#EDGE_ID_DPKEY
) is an instance ofcom.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 possibleReferenceError
if the input graph contains empty group nodes.com.yworks.yfiles.layout.multipage.MultiPageLayouter
: Fixed possibleTypeError
if group node insets are specified with classcom.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 optionremoveNodeOverlaps
is enabled.com.yworks.yfiles.layout.labeling.AbstractLabelingAlgorithm
: Fixed bug that causes poor results if optionremoveEdgeOverlaps
is enabled and the labels should be placed on the edge.com.yworks.yfiles.layout.labeling.SALabeling
andcom.yworks.yfiles.layout.labeling.GreedyMISLabeling
: Fixed possibleReferenceError
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 optionrouteInterEdgesImmediately
is enabled.com.yworks.yfiles.layout.partial.PartialLayouter
: Fixed broken edge routes that may appear if optionedgeRoutingStrategy
is set toEDGE_ROUTING_STRATEGY_OCTILINEAR
.com.yworks.yfiles.layout.grouping.FixedGroupLayoutStage
: FixedcanLayout(LayoutGraph)
which changed the structure and layout of the graph.com.yworks.yfiles.layout.grouping.Grouping
: Fixed bug in methodgetNearestCommonAncestor(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 methodcalculateBounds(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 anRangeError
if the style is set tocom.yworks.yfiles.layout.ComponentLayouter#STYLE_MULTI_ROWS_HEIGHT_CONSTRAINED
orcom.yworks.yfiles.layout.ComponentLayouter#STYLE_MULTI_ROWS_HEIGHT_CONSTRAINED_COMPACT
(seecom.yworks.yfiles.layout.ComponentLayouter#style
) and all components exceed the preferred height (seecom.yworks.yfiles.layout.ComponentLayouter#setPreferredLayoutSize(Number, Number)
).com.yworks.yfiles.layout.PortCandidateSet
: Fixed bug that caused methodcom.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 methodcom.yworks.yfiles.layout.PortCandidateSet#createMatcher()
.com.yworks.yfiles.layout.CopiedLayoutGraph
: FixedReferenceError
that occurs when nodes or edges are added to the copied graph without removing them before callingcommitLayoutToOriginalGraph()
.com.yworks.yfiles.layout.CopiedLayoutGraph
: Fixed problem that may cause movement of label boxes in the original graph even if methodcom.yworks.yfiles.layout.CopiedLayoutGraph#commitLayoutToOriginalGraph()
is not called.com.yworks.yfiles.geom.BorderLine
: Fixed bug in methodgrow(Number, Number, Boolean)
that may produce anIllegalArgumentException
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 methodarrangeRectangleRows(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 possibleTypeError
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 ifcom.yworks.graph.model.TableLayoutConfigurator
is used to prepare the graph for layout calculations. If you want to ignore such labels you can use acom.yworks.yfiles.base.DataProvider
registered with keycom.yworks.yfiles.layout.LabelLayoutKeys#IGNORE_LABEL_KEY
.com.yworks.yfiles.layout.router.polyline.EdgeRouter
: MethoddoLayout(LayoutGraph)
now throws anIllegalArgumentException
if there is a node with zero width or height in the given graph.com.yworks.yfiles.layout.grouping.FixedGroupLayoutStage
: PropertyorthogonalEdgeRouter
now returns an instance of classcom.yworks.yfiles.layout.router.polyline.EdgeRouter
instead of classcom.yworks.yfiles.layout.router.OrthogonalEdgeRouter
.com.yworks.yfiles.layout.ComponentLayouter
: MethodsetPreferredLayoutSize(Number, Number)
now throws anIllegalArgumentException
when setting the preferred size to negative values or zero.- Changed default behavior of edge label placement in
com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter
andcom.yworks.yfiles.layout.LabelLayoutDataRefinement
when usingcom.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 (seecom.yworks.yfiles.layout.hierarchic.incremental.LayerConstraintFactory
) or sequence constraints (seecom.yworks.yfiles.layout.hierarchic.incremental.SequenceConstraintFactory
) using a disposed of factory now throws anError
.com.yworks.yfiles.layout.hierarchic.incremental.ItemFactory
: Added methodcreateRedirectedGroupEdge(Node,Node,Edge)
.com.yworks.yfiles.layout.labeling.SALabeling
andcom.yworks.yfiles.layout.labeling.GreedyMISLabeling
: Changedcom.yworks.yfiles.layout.LabelCandidate
s 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 methodscheck()
andcheck(String)
. Client code that needs to terminate layout calculations prematurely must use new classcom.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
, andcom.yworks.yfiles.layout.grid.ColumnDescriptor
from packagecom.yworks.yfiles.layout.hierarchic.incremental
to packagecom.yworks.yfiles.layout.grid
. com.yworks.yfiles.layout.tree.LayeredNodePlacer
: Removed data provider keyDP_KEY_DISTANCE_TO_PARENT_MAP
from public API, since it is for internal use only.com.yworks.yfiles.layout.router.polyline.PathSearch
: Signature of methodcalculateCosts(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. Seecom.yworks.yfiles.layout.router.polyline.PenaltySettings
.com.yworks.yfiles.layout.planar.DrawingEmbedder
: Removed public methodpreprocessNodes(LayoutGraph)
and protected methodprintStatistics()
.
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 classcom.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 thePreferredPlacementDescriptor
of labels and how this affects the label placement of different layouters.
Minor Features Added
Layout
y.layout.tree.DelegatingNodePlacer
: Added keycom.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 policiesFIX_POINT_POLICY_UPPER_RIGHT
,FIX_POINT_POLICY_LOWER_RIGHT
, andFIX_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 methodisForest(y.base.Graph, boolean)
.com.yworks.yfiles.algo.GraphConnectivity
: Improved methodmakeBiconnected(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 methodbiconnectedComponentGrouping(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 thecom.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 optionautoFlippingEnabled
to specify whether or not edge labels should be automatically flipped if they would be upside-down.com.yworks.yfiles.layout.labeling.AbstractLabelingAlgorithm
added optionautoFlippingEnabled
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 (ifpositioningStrategy
is set toSUBGRAPH_POSITIONING_STRATEGY_BARYCENTER
- Added auto-flipping to
com.yworks.yfiles.layout.RotatedDiscreteEdgeLabelModel
andcom.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 toSCOPE_SUBSET
.- Optimized number of generated
com.yworks.yfiles.layout.PortCandidate
s incom.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) ifweightedCycleRemoval
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 optionsetBackloopRoutingEnabled(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 typeANY_SIDE
for backloop edges.com.yworks.yfiles.layout.hierarchic.incremental.PartitionGridLayoutStage
: FixedNullPointerException
for unbuffered layout runs on graphs with group nodes.com.yworks.yfiles.layout.organic.SmartOrganicLayouter
: Improved results for scopeSCOPE_SUBSET
andSCOPE_MAINLY_SUBSET
(see methodsetScope(byte)
) when only few nodes are marked in the subset to be laid out (seeNODE_SUBSET_DATA
).com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter
: FixedRuntimeException
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 possibleNullPointerException
if the algorithm is applied to a graph with partition grid (seecom.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 optionconsiderNodeAlignment
).com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter
: FixedIllegalStateException
that may appear if there are edges that start/end at group nodes.com.yworks.yfiles.layout.LayoutTool
: Fixed bug in methodrouteEdgesParallel(com.yworks.yfiles.layoutLayoutGraph, com.yworks.yfiles.baseEdge, com.yworks.yfiles.baseEdge, Number, boolean, Number, Number)
that may cause points withDouble.NaN
-coordinates for some edges.com.yworks.yfiles.layout.ParallelEdgeLayouter
: FixedNullPointerException
that appears if the leading edge has zero length.com.yworks.yfiles.layout.ParallelEdgeLayouter
: Fixed bug that may cause points withDouble.NaN
-coordinates for some edges.com.yworks.yfiles.layout.router.BusRouter
: Fixed possibleStackOverflowError
.com.yworks.yfiles.layout.router.BusRouter
: Fixed bug that may cause a broken bus structure.com.yworks.yfiles.layout.router.OrthogonalEdgeRouter
: Fixed rareTypeError
which may appear if monotonic path restrictions are specified.com.yworks.yfiles.layout.router.OrthogonalEdgeRouter
: FixedNullPointerException
that may appear when both optionsrerouting
andlocalCrossingMinimization
are enabled.com.yworks.yfiles.layout.ParallelEdgeLayouter
: FixedTypeError
which may appear when source/target points of parallel edges are outside of the corresponding node.com.yworks.yfiles.layout.router.GroupNodeRouterStage
: Fixed possibleTypeError
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 optionrouteInterEdgesImmediately
is enabled.com.yworks.yfiles.layout.partial.PartialLayouter
: FixedRangeError
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 optionconsiderNodeLabels
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
: Fixedrotate(Number)
to no longer return vertically mirrored results.com.yworks.yfiles.layout.RotatedSliderEdgeLabelModel
andcom.yworks.yfiles.layout.SliderEdgeLabelModel
: Improved label placement at zero-length edge segments.com.yworks.yfiles.geom.OrientedRectangle
: FixedintersectionPoint(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
andcom.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter
: Fixed bug that caused ArgumentException if input graph contains overlapping parallel edges and from sketch mode is enabled (see theuseSketchDrawing
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
, andcom.yworks.yfiles.layout.tree.GenericTreeLayouter
. com.yworks.yfiles.layout.EdgeLabelLayout
: Removed propertypreferredPlacement
and added propertypreferredPlacementDescriptor
com.yworks.yfiles.layout.partial.PartialLayouter
: Replaced methodconfigureOrthogonalEdgeRouter(OrthogonalEdgeRouter)
by methodconfigureEdgeRouter(Layouter)
.com.yworks.yfiles.layout.partial.PartialLayouter
: propertyedgeRoutingStrategy
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.
TheMultiPageLayoutDemo
shows how to use classMultiPageLayouter
to sub-divide large graphs into smaller bits of navigable information. - Class
com.yworks.graph.model.TableLayoutConfigurator
correctly configures aPartitionGrid
information from a given table (com.yworks.graph.model.ITable
) configuration. Classcom.yworks.graph.model.LayoutExecutor
internally delegates to aTableLayoutConfigurator
to supportITable
.
Minor Features Added
Automatic Layout
- In
com.yworks.yfiles.algo.Cycles
the methodfindAllCycleEdges
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 tocom.yworks.yfiles.algo.ShortestPaths
. - The orthogonal layout algorithms
com.yworks.yfiles.layout.orthogonal.OrthogonalLayouter
(OL),com.yworks.yfiles.layout.orthogonal.OrthogonalGroupLayouter
(OGL), andcom.yworks.yfiles.layout.orthogonal.DirectedOrthogonalLayouter
(DOL) now support specifying a minimum first/last segment length. See the descriptions ofEDGE_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 methodsetBendReductionEnabled
and is enabled by default. Note: using this option increases the runtime of thecom.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 interfacecom.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 newInteractiveOrganicLayouterDemo
shows how to perform interactive layout updates with classInteractiveOrganicLayouter
. - In
com.yworks.yfiles.layout.tree.TreeLayouter
when using port stylesBORDER_CENTER_PORTS
andBORDER_DISTRIBUTED_PORTS
together with child placement policiesCHILD_PLACEMENT_POLICY_LEAVES_STACKED
,CHILD_PLACEMENT_POLICY_LEAVES_STACKED_LEFT
,CHILD_PLACEMENT_POLICY_LEAVES_STACKED_RIGHT
, andCHILD_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 styleBORDER_DISTRIBUTED_PORTS
- In
com.yworks.yfiles.layout.labeling.AbstractLabelingAlgorithm
the DataProvider keyLABEL_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 thecom.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
ofcom.yworks.yfiles.algo.Groups
when calculating biconnected components in a graph containing self-loops. - In
com.yworks.yfiles.algo.Groups
the parametersminGroupCount
andmaxGroupCount
of methodedgeBetweennessClustering
had no effect. - Fixed an error in method
findShortestUniformPaths
ofcom.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
incom.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 stagecom.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 toORIENTATION_NONE
and optionsetConsiderNodeAlignment
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 thecom.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 propertymonotonicPathRestriction
.com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: Added DataProvider keyCRITICAL_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 optionstraightenEdges
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
enablescom.yworks.yfiles.layout.router.OrthogonalEdgeRouter
to properly route edges within a partition grid. com.yworks.yfiles.layout.grouping.RecursiveGroupLayouter
: Added DataProvider keyGROUP_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: propertychildPlacementPolicy
.com.yworks.yfiles.layout.tree.TreeLayouter
: Added new global layering option that ensures that large nodes never span more than their layer: propertyenforceGlobalLayering
.com.yworks.yfiles.layout.router.OrthogonalEdgeRouter
: Added support for considering node labels, propertyconsiderNodeLabels
.com.yworks.yfiles.layout.circular.CircularLayouter
: Added DataProvider keyCIRCLE_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 styleSTYLE_BALANCED
which is based on the existingSTYLE_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()
andyOrientedRectangleToFlashOrientedRectangle()
have been added tocom.yworks.geom.util.GeomConvert
. - Class
com.yworks.graph.model.LayoutGraphAdapter
now automatically provides the node and edge id provider registered on the originalIGraph
with the keyscom.yworks.graph.model.DefaultGraph.MAPPER_KEY_NODE_2_ID
andcom.yworks.graph.model.DefaultGraph.MAPPER_KEY_NODE_2_ID
asDataProvider
with the keyscom.yworks.yfiles.layout.LayouterKeys.NODE_ID_DPKEY
andcom.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 acom.yworks.yfiles.layout.LayoutGraph
, e.g. when using a customcom.yworks.yfiles.layout.LayoutStage
. - The methods
getInt
,getDouble
andgetBool
ofcom.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 mappedString
value"2"
will return2
instead of0
. - The new class
com.yworks.graph.model.ConstantMapper
is a simplecom.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 thecom.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
in combination with acom.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 newSequenceConstraintsDemo
show how to apply layer constraints and sequence constraints to thecom.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 newLogicGateDemo
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 thecom.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 thecom.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 methodcalcMaxFlowMinCut()
. - 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 whenuseSketchDrawing
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
anddemo.incrementalHierarchicLayouter.LayerHighlightPositionHandler
to be compatible with yFiles FLEX 1.5 (interfacesIHandle
andIPositionHandler
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 propertyminimumNodeSize
to throw an IllegalArgumentException if a value less than0
was set.com.yworks.yfiles.layout.hierarchic.IncrementalHierarchicLayouter
: Fixed propertyfromScratchLayeringStrategy
. 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.