Research and improve the virtualization performance. Currently, the virtualization in the diagram creates containers for all shapes and sets the Visibility of the containers outside of the viewport to Collapsed. This saves from the layout and rendering performance, but it is not optimal. Consider implementing a standard virtualization mechanism which adds containers in the visual tree only for the shapes within the viewport.
User scenario:
When zooming out on more than 500-600 shapes and then panning, if telerik:DiagramSurface.IsVirtualizing="True", the performance is slower. When virtualization is off, the performance is a little better.
PathTool: Possibility to edit the shape path via edit points like the Pen Tool in Blend.
Extend RadDiagram to support natively Venn Diagrams.
Connect the Diagrams BackgroundGrid to the Ruler's Measurement Unit and ScaleDefinitions. Currently only in DPI measurement unit the scaledefinitions and diagram background grid look good and consistent.
Extend the layout mechanism to allow control over the layouted elements in order to exclude all disconnected shapes from the layout and reorder connections by their target connectors.
There should be annotations (comments) system built into the framework: €¢something like Word where one can add to a word a note €¢something like Excel with its comments bag €¢something like Workflow Foundation where every shape has a popup bag
Currently there is no straightforward way to notify that a point is added/removed from the ConnectionPoints collection of the RadDiagramConnection.
Import from DWG files needed.
A possible workaround is to use an attached property. Basically, we've added ConnectionPointsProperty in AttachedProperties class and added binding to this new property in the style of the connection. public class AttachedProperties { public static RadDiagram Diagram { get; set; } public static readonly DependencyProperty ConnectionPointsProperty = DependencyProperty.RegisterAttached("ConnectionPoints", typeof(List<Point>), typeof(AttachedProperties), new PropertyMetadata(null, OnConnectionPointsChanged)); public static IEnumerable<Point> GetConnectionPoints(DependencyObject obj) { return (IEnumerable<Point>)obj.GetValue(ConnectionPointsProperty); } public static void SetConnectionPoints(DependencyObject obj, IEnumerable<Point> value) { obj.SetValue(ConnectionPointsProperty, value); } private static void OnConnectionPointsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var connection = d as RadDiagramConnection; var connectionPoints = e.NewValue as List<Point>; if (connection != null && connectionPoints != null) { for (int i = 0; i < connectionPoints.ToList().Count; i++) { connection.ConnectionPoints.Add(connectionPoints.ToList()[i]); } connection.IsModified = true; (connection as IConnection).Update(); } } } <telerik:RadDiagram.ConnectionStyle> <Style TargetType="telerik:RadDiagramConnection"> <Setter Property="ConnectionType" Value="Polyline"/> <Setter Property="local:AttachedProperties.ConnectionPoints" Value="{Binding MyConnectionPoints}"/> </Style> </telerik:RadDiagram.ConnectionStyle>
Implement "Item to Item Snapping" during item resize operation.
Add ContainerShape ContentTemplate and ContentTemplateSelector properties in RadDiagram
Be able to pre-select, printer, page size and page orientation in the RadDiagramPrintPreview. By default, RadDiagramPrintPreview set the printing orientation in landscape even if we created a diagram in portrait.
Currently, the print preview control provides only options for the current printer, the page orientation and the page size . Include the following options too:
- Paper Format (Lettre, A4, etc.)
- Paper Orientation (Portrait or Landscape)
- Number of copies (1, 2, 3, ...)
- Print Color Settings (Colors or Monochrome)
- Margins
- Resolution (DPI based on the capabilities of the printer)
The middle point in this context is a point that is located on the line segment that is positioned after the middle length of the line. Add a property on the RadDiagramConnection class that returns the middle point. The property should be DependencyProperty so it can be bound with OneWayToSource mode in order to be able to notify the bound view model (if such is presented).
Currently, you can get this information by combining the CalculateMiddlePointOfLine and AllPoints methods of the ConnectionUtilities class.
var allConnectionPoints = Telerik.Windows.Diagrams.Core.ConnectionUtilities.ConnectionUtilities.AllPoints(radDiagramConnection);
var startAndEndPoints = new Tuple<Point, Point>(radDiagramConnection.StartPoint, radDiagramConnection.EndPoint);
Point middlePoint = Telerik.Windows.Diagrams.Core.ConnectionUtilities.CalculateMiddlePointOfLine(startAndEndPoints, allConnectionPoints);
We use a RadDiagram for what is essentially graphic-art layout. At times, subpixel positioning and extents really are correct for this use case. We have shapes correctly positioned and displaying at subpixel accuracy; however, the selection outline always snaps to a pixel. This is particularly relevant when zoomed in on a piece of art, e.g., aligning semi-transparent edges. It looks odd to have the selection outline lie outside of the visible extents of the art. Furthermore, when moving the art by mouse, the interaction is odd in that the art appears to move smoothly while the selection outline pops from pixel to pixel. This confused our users as to what was really happening as they positioned things. The relevant code for this is in RadDiagram.UpdateManipulationAdorner, which uses Math.Floor and Math.Ceiling to snap the line to pixel borders. This was apparently put in to solve issues of blurriness from having a, say, 1-pixel selection outline lie at a sub-pixel position. Perhaps a dependency property to control whether this snapping happens?
If you have two nested containers and a shape inside the inner container a wrong connector will be activated if you try to create connection (target) to the shape. This can be reproduced with the MVVM SDK example. Try to connect the "Polo" shape to the "Bugatti" shape. The auto connector of the "Bugatti" shape will not be activated when the endpoint of the connection is inside the shape. It will be activated only if you directly hover over the connector.
When you paste a big image (bigger than 1024px) it gets blurry