ProductsServicesDownloadsNewsCompanyContact

yFiles.NET Versionsinformationen

Version 4.1 von yFiles.NET ist das aktuelle Major Release. Sie bringt viele neue Features und ist fast vollständig API-kompatibel zur 4.0-er Versionsserie.
Die aktuelle Versionsnummer von yFiles.NET ist 4.1.0.1.

Technische Voraussetzungen

  • Visual Studio 2008 oder 2010 für die Softwareentwicklung mit yFiles.NET
  • Anwendungen, die auf yFiles.NET Complete bzw. yFiles.NET Viewer basieren, benötigen die Microsoft .NET Framework 3.5 (oder höher) Runtime. Anwendungen, die auf yFiles.NET Layout basieren, benötigen die Microsoft .NET Framework 2.0 (oder höher) Runtime.
  • Ein Browser für die HTML Dokumentation.
  • Ein Microsoft Windows Betriebssystem, das Unterstützung für die .NET Plattform bietet.

yFiles.NET 4.1 - Änderungen zu Version 4.0.1 (englisch)

Major Features Added

Extensively enhanced
swimlane support
New bus-style
edge router
Layout support for
rotated labels

New Comprehensive Support for Swimlane Diagrams

  • New model class yWorks.yFiles.UI.Model.Table provides extensive support for tabular presentation of subgraphs which is well suited for the visual presentation of swimlane layouts.
    Flexible visualization for table elements by means of existing node styles is provided by implementations of the yWorks.yFiles.UI.Drawing.ITableNodeStyle interface.
    [To the corresponding section in the yFiles.NET Developer's Guide...]
  • New dedicated InputMode yWorks.yFiles.UI.Input.TableEditorInputMode which can be used either standalone or as a child mode of yWorks.yFiles.UI.Input.GraphEditorInputMode and which provides support for user interaction specific to the tabular data representation of an associated node.
    [To the corresponding section in the yFiles.NET Developer's Guide...]
  • New support class TableLayoutConfigurator can automatically create a suitable partition grid setup from existing table structures in a graph. Also, LayoutExecutor has been enhanced to optionally configure table specific layout features. [To the corresponding section in the yFiles.NET Developer's Guide...]
  • The Demo.yFiles.Graph.TableEditor demo demonstrates the capabilities of table visualization editing, as well as automatic layout of swimlane diagrams.

Visual enhancements

  • Added new edge label models RotatedSliderEdgeLabelModel and RotatedSideSliderEdgeLabelModel which allow placement of rotated labels on a continuous set of positions along both sides of an edge or directly on the edge path.

Automatic Layout

  • New support for rotated labels (e.g. using the new RotatedSliderEdgeLabelModel or RotatedSideSliderEdgeLabelModel) in the yFiles generic labeling algorithms.
  • 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.
    PartialLayoutModule represents an interactive configurator and launcher for this layout algorithm.
  • 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.
    BusRouterModule represents an interactive configurator and launcher for this layout algorithm.
  • 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 using the MonotonicPathRestriction property.
  • IncrementalHierarchicLayouter: Added data provider key CriticalEdgeDpKey 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.
  • 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.
  • OrthogonalEdgeRouter: Added support for PortCandidateSets that allow to specify the available port candidates at a node.

Minor Features Added

  • CanvasControl now offers a method that yields the Visual for a given ICanvasObject. This can be leveraged by UI testing tools.
  • New class NodeStylePortStyleAdapter can be used to reuse existing INodeStyle implementations for port visualization.
  • GridPaintable's pens can now be customized for all grid styles.

Automatic Layout

  • New layout stage class PartitionGridRouterStage enables OrthogonalEdgeRouter to properly route edges within a partition grid.
  • RecursiveGroupLayouter: Added data provider key GroupNodeLayouterDpKey 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 ILayouter instance specified by the nearest predecessor of the group node (with respect to the grouping hierarchy) which is associated with an ILayouter.
  • TreeLayouter: Added new support for child placement policies that can be used to achieve more compact tree layouts. See ChildPlacementPolicy.
  • TreeLayouter: Added new global layering option that ensures that large nodes never span more than their layer. See EnforceGlobalLayering.
  • OrthogonalEdgeRouter: Added support for considering node labels, see ConsiderNodeLabels.
  • CircularLayouter: Added data provider key CircleIdHolderDpKey that allows to obtain a mapping between nodes and the corresponding circle IDs.
  • OrthogonalEdgeRouter: Added new routing style RoutingStyle.Balanced which is based on the existing RoutingStyle.Prefermiddle but draws segments between bends of the same direction (U-style turns) the short way.

Improvements

  • DropInputMode has been improved to capture the start of a drag enter gesture in cases where the drop target that is hit first would also accept the drag enter event.
  • All built in node styles have been modified to allow the CanvasControl to accept drop enter events even if they are hit first.
  • License failures in the algorithms assembly are reported more prominently when used through LayoutExecutor and related convenience methods.
  • WaitInputMode is automatically enabled while file I/O commands are executed.
  • GraphEditorInputMode.DeleteSelection now doesn't create an empty Undo edit if nothing would be deleted at all.
  • CreateEdgeInputMode: UpdateEdgeStyle is now called after the source port candidate has been determined.
  • Mouse2DEventTypes now also includes the case where mouse capture is lost. All existing input modes have been improved to take advantage of this event, where appropriate.

Automatic Layout

  • LayoutExtensions: Added and improved convenience methods that deal with sequence and layer constraints.
  • IncrementalHierarchicLayouter: Enhanced support for fixed nodes.
  • GroupNodeHider: Several layout algorithms (all tree layouters, circular, all orthogonal layouters, random, the fixed group layout stage) assigned relatively small dimensions to empty group nodes. Some of them also moved these nodes to (0,0). None of these layout algorithms treats groups directly, instead they use the group node hider. The group node hider now optionally does not hide empty groups (HidingEmptyGroupNodes) enabling that these can be treated like normal nodes. This option is now used where appropriate. Note that some layout algorithms may still shrink empty group nodes depending on the particular choice of parameters, e.g., orthogonal layout with uniform node sizes.
  • OrientationLayouter: Node insets as well as port constraints are now also translated correctly for each possible orientation.

Demos

  • Added new Demo.yFiles.Layout.MixedLayout demo that shows how to recursively apply different layout algorithms to the contents of group nodes.
  • Added new Demo.yFiles.Layout.PartialLayout demo that presents specific setup of the new partial layout support in conjunction with Circular, Hierarchic, Organic, and Orthogonal Layout.
  • The new Demo.yFiles.Layout.LayerConstraints demo shows how to use layer constraints with the IncrementalHierarchicLayouter to restrict the node layering.
  • The new Demo.yFiles.Layout.SequenceConstraints demo shows how to use sequence constraints with the IncrementalHierarchicLayouter to restrict the node sequencing.
  • The new Demo.yFiles.Layout.PortCandidate demo shows how PortCandidateSets can be used with IncrementalHierarchicLayouter to control from what side edges connect to certain node types in the automatic layout process.
    It also show-cases a custom node style that displays simple flowchart symbols and integrated port candidate visualization.
  • Added new Demo.yFiles.Layout.LogicGate demo that shows how to apply fixed PortConstraints to a layout and how to use PortCandidates for interactive edge creation (via IPortCandidateProvider).
    It also show-cases a custom node style that displays logic gate symbols.
  • Added new Demo.yFiles.Layout.GenericTree demo that shows the effects of different NodePlacer implementations on a node and its subtree(s) in a tree layout calculated by GenericTreeLayouter.
  • The new Demo.yFiles.Layout.EdgeLabeling demo shows how to configure different edge label models as well as how to apply the generic edge labeling algorithm.
  • The new Demo.yFiles.Layout.NodeLabeling demo shows how to use the node label models in conjunction with the yFiles generic labeling algorithms.
  • Added new Demo.yFiles.Graph.BusinessProcessDiagram demo that presents bow to create, edit, and lay out business process diagrams that adhere to the Business Process Modeling Notation.
  • The new Demo.yFiles.Layout.BusRouterDemo shows how to use the orthogonal bus-style edge router.

Bugfixes

  • Resizing nodes interactively did not make use of additional snap lines from the GraphSnapContext.
  • The expand and collapse group node commands did not execute in case the UseCurrentItemForCommand property was being used.
  • NavigationInputMode.ExitGroup raised the GroupEntered event instead of the GroupExited event.
  • CreateEdgeInputMode started calculation of the target port candidates too early and did not remove the highlighting of the target node if the creation was canceled early during the gesture.
  • A race condition in the license verification mechanism could lead to license failures in multi-threaded environments.
  • When no license information has been embedded during compile time, the license was searched in the filesystem during runtime, instead of resulting in a license failure.
  • A memory leak in CreateEdgeInputMode made cleaning up a GraphControl impossible after an edge had been created interactively using that mode with snapping disabled.
  • CreateEdgeInputMode's GetSourcePortCandidate method was sometimes invoked with the wrong location.
  • MouseHoverInputMode now reacts during mouse drags, too and method Show respects parameter if it differs from the mouse location.
  • Mouse events were being redispatched, even if the mouse was outside the GraphControl. This resulted in tooltips being displayed and other potential issues when the overview was used to move the viewport.
  • ClickInputMode.ValidHitTestable was not always queried in certain double click configurations.
  • Minimum node size was not automatically provided to the algorithms library by LayoutGraphAdapter.
  • Animator.AnimateAndWait did not update the control if called from the event dispatching thread.
  • Fixed multiple issues related to GraphML (de)serialization of IDictionaries.
  • Content properties that are writable and have a collection type were not deserialized correctly.
  • CanvasControl.FitContentViewMargins was never used.
  • The inline label text editor used by TextEditorInputMode could not handle Unix style line breaks correctly.
  • The GraphClipboard did not always copy all state of items that were invisible in a folded graph view.

Automatic Layout

  • InteractiveOrganicLayouter: Fixed bug that prevented the calculation of any layout before the first call to WakeUp.
  • ComponentLayouter: Fixed bug that caused a wrong component assignment if customized component IDs were used.
  • IncrementalHierarchicLayouter: Fixed bug that sometimes caused an assignment of infinite coordinates to group nodes as well as to points of edges incident to group nodes.
  • IncrementalHierarchicLayouter: Fixed bug that caused unnecessary crossings when using node grouping.
  • Overriding yWorks.yFiles.Layout.Tree.DelegatingNodePlacer#GetLowerRightChildren and GetUpperLeftChildren had no effect.
  • Fixed potential IndexOutOfRangeException in yWorks.yFiles.Layout.RotatedSliderEdgeLabelLayoutModel.
  • Fixed invalid cast in yWorks.yFiles.Layout.Router.EdgeGroupRouterStage.
  • Fixed NullReferenceException when using yWorks.yFiles.Orthogonal.OrthogonalLayouter in FromSketchMode.
  • DrawingEmbedder: Fixed NullReferenceException caused by nodes having the same center.
  • NetworkFlows: Fixed wrong calculation of the cut set returned by method CalcMaxFlowMinCut(Graph, Node, Node, IDataProvider, IEdgeMap, INodeMap).
  • EdgeGroupRouterStage: Fixed bug that caused violation of edge grouping constraints as well as port constraints.
  • Fixed potential race condition when trying to access the edge path during layout calculation.

Incompatible Changes

  • When LayoutExecutor.Duration is 0, the viewport is now only moved when AnimateViewport is true.
  • yWorks.yFiles.Algorithms.Util.DoubleObjectPQ: Changed the type of parameter priority from int to double for methods DecreasePriority, IncreasePriority and ChangePriority.
  • OrientationLayouter: Changed behavior for mirrored orientations, i.e., there may be a fixed position offset between the layout results of the old and new version. The new version ensures that the position of elements not changed by the layout algorithm are kept fixed.
  • Mouse2DEventTypes has a new enumeration member 'LostCapture'. If cascades and switches over variables of this type might need to be adjusted to properly deal with this event type.
  • LayoutGraphAdapter can optionally create copies of node and edge styles during layout calculation. This is controlled by the new property CopyStyles. Utility class LayoutExecutor enables this feature if the layout is performed in a different thread.
  • The Cut command on GraphControl is now only enabled if DeletableItems allows the deletion of the currently selected nodes.