The newest available bugfix and maintenance release of yFiles for Java is version 188.8.131.52.
SmartEdgeLabelModel, it was impossible to move a label from the left side of an edge to the right side. Instead, the label stopped at the edge.
#compareRenderOrderand when using
BOTTOM_LEFTnow work correctly.
DefaultLabelStyle: Fixed insets calculation.
LayoutExecutorwhich could occur when a layout is applied to a graph which contains table nodes which are not group nodes.
RotatableNodesDemothat shows how support for rotated node visualizations can be implemented on top of the yFiles library.
PartitionGridDemothat shows how a
PartitionGridcan be used in layout calculations to restrict the node positions to grid cells.
RenderingOrderDemothat shows the effect of different render policies on the z-order of nodes, edges, labels and ports.
EdgeToEdgeDemothat demonstrates the use of edge-to-edge connections.
GenericLabelingalgorithm and improved the quality of the label placements for some cases.
EdgeStyleDecorationInstallerwould cause an exception when used on edges that connect to other edges.
CreateEdgeInputMode: Fixed a bug that caused the visualization of source port candidates to flicker.
EdgeStyleDecorationsInstallerclass now properly displays decorations for edges between group nodes and their descendants when displayed in view coordinates.
CollapsibleNodeStyleDecorator: Although the wrapped style has its own
IClickListenerdefined in its lookup, it was not always used by the
UndoEnginethat could lead to memory leaks if the tokens returned by
getTokenwere not disposed of when the
GridVisualCreatorthat rendered the grid at the wrong location when the viewport contained negative coordinates.
IsHitrespects buttons outside the node bounds.
Paths#findAllChainsnow correctly calculates the chains of input graphs with cycles.
EdgeRouterthat sometimes caused a non-deterministic behavior.
PolylineLayoutStagedoes no longer generate overlaps between sloped, polyline segments created by the stage and unrelated other obstacles (e.g. nodes).
EdgeRouterclass during routing in cases where the input contained grouped edges.
GenericLabelingclass now produces better results for edge labels that have a preferred distance to the edge (
PreferredPlacementDescriptor#DistanceToEdge) and at the same time multiple
SideOfEdgepreferences (e.g. left of edge and on the edge). Previously, the algorithm sometimes violated the preferred distance even though it would have been possible to keep it.
PortCandidatewith fixed offsets (or a strong
PortConstraint) by the
EdgeRouterclass. The first was only triggered for constraints at the target side and only when the target node was additionally partly or fully covered by other obstacles (e.g. node labels). The second issue appeared in cases with the source and target node fully overlapping (e.g. an edge from a group to a child node).
EdgeRouterclass no longer throws an exception for inputs (rare) containing fixed, grouped edges and when
EdgeRouternow considers the correct
NodeHaloassociated with the target node when handling the minimum last segment length setting. Previously it incorrectly considered the halo of the source node which could lead to unnecessarily long or too short last segments.
EdgeRouternow correctly considers intersections between edges and labels of fixed edges if property
EdgeRouterclass during routing in cases where the source/target node is covered by obstacles (i.e. other nodes, labels).
EdgeRouterclass now correctly considers intermediate routing points when using the polyline routing style (
EdgeRouter#PolylineRoutingEnabled). Previously, it could happen that intermediate points were not part of the final polyline edge path.
PartialLayoutnow correctly considers the specified
PortCandidatesduring the orthogonal/octilinear routing of edges.
EdgeRouterno longer considers all
PortCandidateswith multiple directions as fixed
OrthogonalLayoutclass no longer throws an exception when property
OrthogonalLayout#UniformPortAssignmentEnabledis enabled and the input contains parallel edges.
CompactNodePlacerclass now correctly considers the specified values of the
OrganicRemoveOverlapsStageno longer produces infinite loops for some rare cases.
CompactNodePlacerclass no longer throws an exception for some inputs with specified strategy memento information (either via property
TreeLayoutData#CompactNodePlacerStrategyMementosor with a mapper registered with key
HierarchicLayoutclass are now shorter and take up less space if possible. Previously, segments were sometimes unnecessarily long even though the minimum length settings allowed shorter segments.
RecursiveGroupLayout, the values of the properties
ComputedPositionof the classes
RowDescriptorare now correctly set after the layout if
EdgeRouteris the corresponding
HierarchicLayoutclass now produces less superfluous crossings if there are same-layer edges with
EdgeRouterclass for cases where a large number of fixed and overlapping edge segments exist. Previously, the search could become very slow in such scenarios.
HierarchicLayoutclass now correctly handles port labels with zero height/width. Previously, such labels may have caused very large distances between some nodes.
HierarchicLayoutclass sometimes threw an
ArgumentExceptionfor input graphs that contained incremental elements in combination with groups.
HierarchicLayoutclass now prevents intersections between labels and the horizontal grid lines of a
EdgeRouterclass no longer throws an exception for some inputs containing edges with intermediate routing points.
HierarchicLayoutclass now places sloped segments of grouped octilinear edges such that they are perfectly overlapping each other. Previously, it could happen that segments were slightly displaced with respect to each other.
SeriesParallelLayoutnow correctly handles input graphs with groups that only contain disconnected nodes. Previously, such inputs caused an exception.
HierarchicLayoutthat could cause non-orthogonal segments when the input contained port labels in conjunction with edge grouping.
OrganicLayoutclass now produces deterministic results for group nodes (if property
ArcEdgeStylenow consider property changes of their source and target arrows. Previously the source or target arrow properties had to be changed to instantly see the effect.
OrganicLayoutData: The new properties
TargetGroupIdscan be used to group edges when some preconditions are met.
CanvasComponent#ScrollCommandAnimationEnabledenabled no longer changes the zoom level.
SnapResultimplementations, that has caused a
NullPointerExceptionwhen the corresponding template is null.
DefaultLabelStyleRenderer: Fixed vanishing text when using a shared renderer instance between labels with non-empty text and label with empty text.
PortDropInputMode: The labels of dragged ports were not displayed correctly.
HierarchicLayout: Fixed a problem that sometimes caused too long straight-line same-layer edges. Note that the additional length was equal to the value of
HierarchicLayout: Fixed endless loop issue causing a
StackOverflowErrorif a sub-component with a nested layout algorithm that again applied an instance of
HierarchicLayout: Fixed possible
NullPointerExceptionfor input graphs with source/target port labels (see
LabelPlacements.AT_TARGET_PORT) and with a subset of nodes associated with halos (see
HierarchicLayout: Fixed a bug that sometimes caused a wrong placement of source/target edge labels when integrated edge labeling was enabled and if there were either critical edges (see
HierarchicLayout.CRITICAL_EDGE_DPKEY) or property
SimplexNodePlacer: Fixed a very rare
IllegalArgumentExceptionthat was caused by some input graphs that contain both swimlanes and groups as well as fixed elements.
HierarchicLayout: Fixed bug that could cause the violation of fixed port candidates if there were critical edges (see
HierarchicLayout.CRITICAL_EDGE_DPKEY) and edges connecting to group nodes.
OrganicLayout: Fixed bug that caused that movable nodes kept their initial location if the scope is set to
MAINLY_SUBSETand if there are output restrictions (see
TreeLayout: Fixed bug that caused less compact results when using the
TreeLayout: Fixed bug that caused that the layout algorithm sometimes did not pass on exceptions that occurred during the layout calculation but caught them without proper handling.
NullPointerExceptionthat was triggered when the tree root was marked as assistant node, see
IllegalStateExceptionthat could occur for input graphs that contain assistant nodes (see
AssistantNodePlacer#ASSISTANT_DPKEY) and given placement strategies (see
NullPointerExceptionthat occurred when the subtree layout style
TreeLayoutStyle#INTEGRATEDwas specified, the subtree orientation was fixed and the graph was almost a tree graph with the exception that the root node contained additional self-loop edges.
SeriesParallelLayout: Fixed a rare bug that triggered a
NullPointerExceptionwhen the input location of a node was set to a very large value (e.g. largest possible floating-point value). This applies if the algorithm is not in from-sketch mode. For the from-sketch mode, an exception can still occur - this case is considered to be bad input.
NullPointerExceptionthat was triggered when there was a
DataProviderregistered with the graph with key
ComponentLayout: Fixed an
IllegalArgumentExceptionthat was triggered for some input graphs with user-defined components (see
COMPONENT_ID_DPKEY) where at least one node had
nullas its component id.
RecursiveGroupLayout: Fixed a bug that caused violation of PortConstraints or PortCandidates for self-loops where both endpoints were restricted to the same node side.
Polyline.EdgeRouter: Fixed a rare
NullPointerExceptionthat was triggered for some input graphs when the maximum duration was exceeded.
Polyline.EdgeRouter: Fixed bug that could cause unnecessary bends for edges that need to cross group node borders.
Polyline.EdgeRouter: Fixed an issue that caused edge-to-edge distance violations (for segments directly connecting at a node) even if a cheaper route that e.g., introduces a bend - which costs less by default - was available.
PolylineLayoutStage: Fixed a bug that caused collinear bends to be removed from fixed edges. Now, such fixed edges are not changed anymore.
GenericLabeling: Fixed a very rare
IllegalArgumentExceptionthat was caused by some input graphs that contain edges with zero length segments and labels associated with a free edge label model (i.e.,