ProductsServicesDownloadsNewsCompanyContact

yFiles.NET Versionsinformationen

Version 3.2 von yFiles.NET ist das aktuelle Major Release. Diese Version hat keine Abhängigkeit auf J# Assemblies mehr. Sie deckt eine Vielzahl neuer Anwendungsgebiete und Algorithmen ab, und ist fast vollständig API-kompatibel zur 3.1-er Versionsserie.
Die aktuelle Versionsnummer von yFiles.NET ist 3.2.1.2.

Technische Voraussetzungen

  • Visual Studio 2005 oder 2008 für die Softwareentwicklung mit yFiles.NET
  • Das Microsoft .NET Framework 2.0, um yFiles.NET Programme ausführen zu können.
  • Microsoft Internet Explorer 6.0 oder höher, Mozilla Firefox 2.0 oder höher zum Browsen der Dokumentation.
  • Ein Microsoft Windows Betriebssystem, das Unterstützung für die .NET Plattform bietet.

yFiles.NET 3.2 - Änderungen zu Version 3.1.1 (englisch)

Major Features Added

Folding support Bridges in edge paths Swimlane layout for grouped graphs Family tree layout
Folding support Bridges in
edge paths
Swimlane layout for
grouped graphs
Family tree layout

Removed Dependency on J# Assemblies

yFiles.NET 3.2 no longer depends on J# assemblies. Although there are still references to classes from the java.awt and java.util namespaces in some of the method signatures, replacement implementations of these classes are provided as part of the yFiles.NET assemblies.

Support for folding operations in hierarchically grouped graphs

  • Class yWorks.yFiles.UI.Model.FoldingManager can be used to establish a model-view setup where so-called managed views provide support for folding operations in a hierarchically grouped graph.
  • Interface yWorks.yFiles.UI.Model.IFoldedGraph defines the contract for working with the folding-enabled graph in a managed view. It enables collapsing of group nodes and expanding of previously collapsed group nodes.
  • The various IInputMode implementations fully support working with folding-enabled graphs. Both collapsing and expanding group nodes and also navigating into and out of group nodes is covered.
  • The clipboard facility and undo engine fully support folding operations transparently.
  • A new node style decorator, yWorks.yFiles.UI.Drawing.ICollapsibleNodeStyleDecorator, has been added. It is specifically designed to support the user interaction part of folding operations with group nodes by means of a collapse/expand "handle."
  • Class HierarchyTreeView provides additional folding-related support for displaying the hierarchy of a folding-enabled graph in a TreeView control.
  • The GraphML framework has been extended to fully support reading and writing the collapsed/expanded state of group nodes in hierarchically grouped graphs.

Visual Enhancements

  • Class yWorks.yFiles.UI.BridgeManager provides support for so-called bridges in edge paths that resolve the visual ambiguity induced by edge crossings.

Automatic Layout

  • The automatic layout algorithms no longer depend on J# assemblies.
  • Layout algorithm y.layout.hierarchic.IncrementalHierarchicLayouter now supports swimlane layouts of hierarchically grouped graphs.
  • Layout algorithm y.layout.hierarchic.IncrementalHierarchicLayouter now allows to specify placement constraints for nodes that reside in the same layer. A default implementation of new interface y.layout.hierarchic.incremental.SequenceConstraintFactory enables user-defined constrained node sequencing, where nodes can be specified to be placed at the beginning or the end of their respective layer, or can be specified to be placed before/after a given reference node.
  • A new domain-specific layout algorithm, y.layout.genealogy.FamilyTreeLayouter, has been added that is especially suited for genealogical family trees.
  • A new planarity test class, y.layout.planar.PlanarityTest, has been added. It can be used to test a graph for planarity and to create a planar embedding of a planar graph. Both can be done in linear time.
  • Minimum size constraints for group nodes have been added to the major layout algorithms y.layout.hierarchic.HierarchicGroupLayouter, y.layout.organic.OrganicLayouter, y.layout.organic.SmartOrganicLayouter, and y.layout.hierarchic.IncrementalHierarchicLayouter.
    the relevant data can be bound to the graph using data provider look-up key y.layout.grouping.GroupingKeys#MINIMUM_NODE_SIZE_DPKEY.
  • Significantly improved generic label placement algorithms y.layout.labeling.SALabeling and y.layout.labeling.GreedyMISLabeling. The number of overlapping labels has been drastically reduced. Furthermore, these algorithms now place labels associated with the FREE label model.
  • Added the ability for the organic layout algorithms to deal with elliptical shapes of group nodes, which may themselves contain elliptical node shapes. Class y.layout.organic.EllipticalGroupBoundsCalculator can be used to add this ability to the algorithms.
  • Class y.layout.SequentialLayouter has been added, that can be used to run several layouters sequentially one after the other.

Graph Analysis Algorithms

  • The graph analysis algorithms no longer depend on J# assemblies.
Folding support Bridges in edge paths Swimlane layout for grouped graphs Family tree layout
Folding support Bridges in
edge paths
Swimlane layout for
grouped graphs
Family tree layout

Minor Features Added

Graph Analysis Algorithms

  • y.algo.Cycles: added method #findAllCycleEdges(y.base.Graph, boolean)
  • Class y.algo.IndependentSets has been added. It provides methods for calculating independent sets of nodes.

GraphML Enhancements

  • GraphML (de)serialization can be performed purely based on reflection information, removing the need for custom (de)serializer implementations for many use cases.
  • The default format for serialized objects has been changed to XAML object syntax (this only affects classes that are new to yFiles.NET 3.2). The GraphML parsing framework also supports most of the XAML syntax, with the main exception of inlined (attribute syntax) markup extensions.
  • Registration and lookup of (De)Serializer implementations has been simplified and made consistent.

Automatic Layout

  • Class y.layout.tree.NodeOrderComparator has been added as a convenience implementation to easily specify the order of child nodes in a tree-like structure. The tree layout algorithms y.layout.tree.TreeLayouter, y.layout.tree.HVTreeLayouter, y.layout.tree.ARTreeLayouter, and y.layout.tree.BalloonLayouter.
  • y.layout.hierarchic.incremental.TopLevelGroupToSwimlaneStage has been added and allows for conveniently doing swimlane layouts for the incremental hierarchic layouter. It interprets top level group nodes as swimlanes and configures the core layouter appropriately.
  • y.layout.hierarchic.IncrementalHierarchicLayouter: By default, edges at group nodes are used for layering even when recursive group layering is disabled and for incremental layering.
  • y.layout.OrientationLayouter: added feature to mirror the graph at the x-axis or y-axis according to the given layout orientation. See method #setMirrorMask(int).
  • y.layout.hierarchic.IncrementalHierarchicLayouter now has an improved port assignment strategy for edges that connect to group nodes.
  • y.layout.hierarchic.ConstraintLayerer$ConstraintFactory: it is possible to specify weights to better enforce preferred layer distances.
  • y.layout.router.OrthogonalPatternEdgeRouter: added new patterns for selfloops.
  • y.layout.router.OrthogonalPatternEdgeRouter: improved routing for edges inside group nodes.
  • y.layout.orthogonal.OrthogonalLayouter: now produces drawings with less crossings.

Improvements

  • y.layout.organic.InteractiveOrganicLayouter: added method y.layout.organic.InteractiveOrganicLayouter#startLayout and y.layout.organic.InteractiveOrganicLayouter#stopAndWait. Adjusted corresponding demos.
  • y.layout.hierarchic.IncrementalHierarchicLayouter: Sometimes if both swimlanes and groups and layers have been defined by the user, the algorithm would place the group nodes into newly created layers in order to avoid group node overlaps, although this might not always be necessary. The algorithm has been improved to better detect overlaps.
  • y.layout.grouping.InsetsGroupBoundsCalculator has been enhanced to optionally take node labels of child nodes into account when calculating the bounds of a given group node. See also #isConsiderNodeLabelsEnabled() and #setConsiderNodeLabelsEnabled(boolean).

Demos Added

  • New demos that are tailored to specific aspects of InputMode handling.
  • New folding demo Demo.yFiles.Graph.Folding.
  • New demo that showcases the bridge calculation feature Demo.yFiles.Graph.Bridges.

Bugfixes

  • y.layout.router.OrthogonalEdgeRouter: Fixed bug where edges weren't routed orthogonally if rerouting was enabled ( #setReroutingEnabled(boolean) )
  • Fixed bug where wrong minimum size is set when data provider y.layout.grouping.GroupingKeys#MINIMUM_NODE_SIZE_DPKEY is missing.
  • y.layout.labeling.MISLabelingAlgorithm: Fixed calls to getProfit after labeling causing NullPointerException.
  • y.layout.router.OrthogonalSegmentDistributionStage: Replaced casts to java.util.List with java.util.Collection to conform with API documentation for y.layout.PortCandidate#SOURCE_PCLIST_DPKEY and y.layout.PortCandidate#TARGET_PCLIST_DPKEY.
  • y.layout.router.OrthogonalEdgeRouter: fixed bug where strong PortConstraints as well as fixed PortCandidates were not obeyed.
  • y.layout.hierarchic.IncrementalHierarchicLayouter: #LAYERING_STRATEGY_USER_DEFINED did not work as expected for unconnected graphs, since each component was layered and normalized separately. The fix ensures that layer IDs are respected globally.
  • y.layout.hierarchic.IncrementalHierarchicLayouter: Group layer compaction did not always work correctly for for graphs with edges at group nodes.
  • y.layout.router.OrthogonalSegmentDistributionStage: fixed bug where fixed PortCandidates weren't kept. This also affects y.layout.router.ChannelEdgeRouter and in some very uncommon cases y.layout.router.OrthogonalEdgeRouter.
  • y.layout.tree.TreeLayouter: fixed incorrect handling of label bounds if a non-default orientation was used.
  • y.layout.hierarchic.IncrementalHierarchicLayouter: Fixed incorrect calculation of group node heights for certain cases where edges at group nodes were present.

Changes in Default Behavior

  • y.layout.hierarchic.IncrementalHierarchicLayouter: #LAYERING_STRATEGY_USER_DEFINED or #LAYERING_STRATEGY_FROM_SKETCH disable recursive group layering.
  • y.layout.CopiedLayoutGraph automatically registers a DataProvider under y.layout.Layouter#NODE_DP_KEY if not already present on the original graph.

Incompatible API Changes

Removed Dependency on J# Assemblies

yFiles.NET 3.2 no longer depends on J# assemblies. Both the layout algorithms and analysis algorithms classes now use native .NET framework types instead of Java types, respectively use replacement class implementations.
Please see the yFiles.NET 3.2 migration guide for more information.

  • yWorks.yFiles.UI.Input.GraphEditorInputMode: many of the boolean flag properties have been removed and replaced by properties that take type-safe flaggable enumeration values. Use MarqueeSelectableItems instead of the various MarqueeSelect* properties. The functionality of boolean property SelectElementsAllowed can be mapped to the SelectableItems enumeration property.
  • yWorks.Canvas.Input.MainInputMode.MarqueeSelect now takes one more argument as a predicate, that can be set to null for backwards compatibility.
  • The two deprecated Install and Uninstall methods from yWorks.Canvas.Input.AbstractInputMode that were using the CanvasControl parameters have been finally removed in favor of the variants that take the IInputModeContext arguments. Adjust the implementation accordingly and obtain the canvas instance from the context object.
  • Most of the floating point properties in ICanvasContext and CanvasControl and the related interfaces that were of type float have been changed to double precision floating point type. Change variable declarations or add casts where necessary.
  • Class yWorks.yFiles.UI.Model.EmptyPortsCandidateProvider has been renamed from the slightly misspelled version that was missing a 'd'. Add the missing letter.
  • yWorks.GraphML.Writer.IWriteContext now extends yWorks.Support.ILookup instead of yWorks.Support.IContextLookup. The serializer for a given object is no longer available through the context lookup, use method GetSerializer instead.
  • yWorks.GraphML.Writer.AbstractSerializer: properties TagName and XmlNamespace are deprecated, use the context aware methods GetTagName and GetXmlNamespace instead.
  • yWorks.GraphML.Writer.GraphMLWriter: property WriteUserTags has been removed, use the corresponding context property or GraphMLIOHandler instead. Also, this class does not implement yWorks.Support.ILookupDecorator anymore, where necessary, decorate the current write context directly.
  • All constants in yWorks.GraphML.Writer.AbstractXmlWriter have been move to class XmlConstants.
  • yWorks.GraphML.Reader.IParseContext now extends yWorks.Support.ILookup instead of yWorks.Support.IContextLookup. The deserializer for a given object is no longer available through the context lookup, use method GetDeserializer or convenience method Deserialize instead.
  • yWorks.GraphML.Reader.DOM.DOMGraphMLParser: properties ReadUserTags and ContextProperties have been removed, set the corresponding context property directly or use GraphMLIOHandler instead.
  • yWorks.GraphML.Reader.ReferenceResolver has been refactored to interface IReferenceResolver. Also, only method ResolveReference is still public.
  • All concrete implementations of yWorks.GraphML.Reader.IDeserializer have been made private, retrieve the correct implementation for a given object through the parse context instead.
  • y.layout.hierarchic.incremental.IncrementalHintsFactory, y.layout.hierarchic.ConstraintLayerer$ConstraintFactory, y.layout.hierarchic.incremental.SequenceConstraintFactory: All methods that previously had y.base.Node or y.base.Edge arguments now take java.lang.Object instead. This will require recompilation. In addition, if you manually register a DataProvider under y.layout.Layouter#NODE_DP_KEY on the graph, you are now required to use the IDs stored in this DataProvider as arguments for these methods.