The loading time is very slow when there are 100 connections and the connection bridge is set to Bow
Use attached to reproduce.
To reproduce: add a RadDiagram and use the following code snippet: this.radDiagram1.PanToPosition(new Telerik.Windows.Diagrams.Core.Point(10,10)); Workaround: subscribe to the Pan event: this.radDiagram1.Pan += radDiagram1_Pan; void radDiagram1_Pan(object sender, Telerik.WinControls.UI.Diagrams.PositionChangedRoutedEventArgs e) { }
To reproduce: - Zoom the diagram and drop an item from the toolbox. Workaround: Friend Class MyToolbox Inherits RadDiagramToolbox Protected Overrides Sub DragDropService_PreviewDragDrop(ByVal sender As Object, ByVal e As RadDropEventArgs) 'base.DragDropService_PreviewDragDrop(sender, e); Dim shape = TryCast(GetType(RadDiagramToolbox).GetField("shape", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance).GetValue(Me), RadDiagramShape) Dim diagramElement As RadDiagramElement = TryCast(e.HitTarget, RadDiagramElement) Dim containerShape As RadDiagramContainerShape = TryCast(e.HitTarget, RadDiagramContainerShape) If containerShape IsNot Nothing Then diagramElement = containerShape.FindAncestor(Of RadDiagramElement)() End If If diagramElement Is Nothing OrElse diagramElement.Shape IsNot Nothing OrElse shape Is Nothing Then Return End If e.Handled = True Dim zoom As Double = diagramElement.Zoom Dim m As Telerik.WinControls.Layouts.RadMatrix = diagramElement.MainPanel.Transform m.Invert() Dim position = New Telerik.Windows.Diagrams.Core.Point(m.DX + (e.DropLocation.X - shape.Width \ 2) * 1 / zoom, m.DY + (e.DropLocation.Y - shape.Height \ 2) * 1 / zoom) If containerShape IsNot Nothing Then position.X += containerShape.Position.X position.Y += containerShape.Position.Y End If shape.Position = position diagramElement.AddShape(shape, Nothing, True) If containerShape IsNot Nothing Then DirectCast(containerShape, IContainerShape).AddItem(shape) End If shape = Nothing End Sub End Class
Workaround: Private Sub RadDiagram1_MouseDoubleClick(sender As Object, e As MouseEventArgs) If e.Clicks = 2 Then Dim shape As RadDiagramShape = Me.RadDiagram1.DiagramElement.ElementTree.GetElementAtPoint(e.Location).FindAncestor(Of RadDiagramShape)() If shape IsNot Nothing Then 'ToDo End If End If End Sub
To reproduce: public Form1() { InitializeComponent(); RadDiagramShape shape = new RadDiagramShape(); shape.Text = "Shape1"; shape.AllowCopy = false; shape.AllowPaste = false; shape.AllowDelete = false; shape.AllowCut = false; shape.Position = new Telerik.Windows.Diagrams.Core.Point(50, 50); shape.BackColor = Color.Red; this.radDiagram1.AddShape(shape); } Workaround: Hide the first tab in the SettinsgPane as it is demonstrated in the following article: http://www.telerik.com/help/winforms/diagram-settings-pane.html
To reproduce: - Add some shapes and call the BringToView method Private Sub RadButton4_Click(sender As Object, e As EventArgs) Handles RadButton4.Click Dim ds As RadDiagramShape For i As Integer = 0 To Me.RadDiagram1.Shapes.Count - 1 If i = 2 Then ds = DirectCast(RadDiagram1.Shapes(i), RadDiagramShape) Me.RadDiagram1.DiagramElement.BringIntoView(ds, 1.0, True) Exit For End If Next End Sub Workaround: Me.RadDiagram1.DiagramElement.BringIntoView(ds, 1.0, False)
To reproduce: - Add shape and zoom the view. - Call the method: radDiagram1.DiagramElement.BringIntoView(radDiagram1.Shapes[0]); Workaround: radDiagram1.DiagramElement.BringIntoView(radDiagram1.Shapes[0],radDiagram1.Zoom, false);
The user is not allowed to add a shape or edit an existing one by using the TextTool: http://docs.telerik.com/devtools/winforms/diagram/diagram-tools/text-tool Workaround: Me.RadDiagramRibbonBar1.buttonTextTool.Visibility = Telerik.WinControls.ElementVisibility.Collapsed
How to reproduce: public partial class Form1 : Form { public Form1() { InitializeComponent(); RadDiagramShape shape1 = new RadDiagramShape() { Text = "Second Level Domain", ElementShape = new RoundRectShape(4), BackColor = Color.LimeGreen }; shape1.Position = new Telerik.Windows.Diagrams.Core.Point(100, 100); radDiagram1.Items.Add(shape1); var res = radDiagram1.Items[0]; ((Telerik.WinControls.UI.Diagrams.RadDiagramItem)shape1).EndEdit += item_EndEdit; RadDiagramShape shape2 = new RadDiagramShape() { Text = "Top Level Domain", ElementShape = new RoundRectShape(50), BackColor = Color.Cyan }; shape2.Position = new Telerik.Windows.Diagrams.Core.Point(1600, 100); radDiagram1.Items.Add(shape2); RadDiagramShape shape3 = new RadDiagramShape() { Text = "Organization Domain", ElementShape = new RoundRectShape(20), BackColor = Color.Yellow }; shape3.Position = new Telerik.Windows.Diagrams.Core.Point(2400, 100); radDiagram1.Items.Add(shape3); RadDiagramConnection connection1 = new RadDiagramConnection() { Name = "connection1" }; connection1.Source = shape1; connection1.Target = shape2; radDiagram1.Items.Add(connection1); RadDiagramConnection connection2 = new RadDiagramConnection() { Name = "connection2" }; connection2.Source = shape2; connection2.Target = shape3; radDiagram1.Items.Add(connection2); } private void item_EndEdit(object sender, Telerik.WinControls.UI.Diagrams.RadRoutedEditEventArgs e) { RadDiagramShape shape = ((RadDiagramShape)sender); string txt = shape.Text; Size size = TextRenderer.MeasureText(txt, shape.Font, new System.Drawing.Size( (int)shape.Width, int.MaxValue ), ~TextFormatFlags.SingleLine); shape.Height = size.Height; } private void radButton1_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[0], this.radDiagram1.Zoom, false); } private void radButton2_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[1], this.radDiagram1.Zoom, false); } private void radButton3_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[2], this.radDiagram1.Zoom, false); } } Workaround: manually update the view private void radButton1_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[0], this.radDiagram1.Zoom, false); this.radDiagram1.DiagramElement.Controller.OnViewportChanged(); } private void radButton2_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[1], this.radDiagram1.Zoom, false); this.radDiagram1.DiagramElement.Controller.OnViewportChanged(); } private void radButton3_Click(object sender, EventArgs e) { this.radDiagram1.DiagramElement.BringIntoView(radDiagram1.Items[2], this.radDiagram1.Zoom, false); this.radDiagram1.DiagramElement.Controller.OnViewportChanged(); }
To reproduce: - Add some shapes and zoom so only one is visible. - Export to image. - The image size is not correct. Workaround: private const int InflateValue = 7; public System.Drawing.Image ExportToImage() { RadDiagramElement diagram = radDiagram1.DiagramElement; var enclosingBounds = diagram.CalculateEnclosingBounds(); using (Bitmap image = new Bitmap((int)(Math.Abs(enclosingBounds.Right) + InflateValue + Math.Abs( enclosingBounds.Left)), (int)(Math.Abs(enclosingBounds.Bottom) + InflateValue + Math.Abs(enclosingBounds.Top)))) { System.Drawing.Graphics nativeGraphics = System.Drawing.Graphics.FromImage(image); nativeGraphics.FillRectangle(new System.Drawing.SolidBrush(diagram.ElementTree.RootElement.BackColor), 0, 0, image.Width, image.Height); Telerik.WinControls.Paint.RadGdiGraphics radGdi = new Telerik.WinControls.Paint.RadGdiGraphics(nativeGraphics); foreach (RadElement element in diagram.ItemsHost.GetChildren(ChildrenListOptions.ZOrdered)) { element.Paint(radGdi, new System.Drawing.Rectangle(int.MinValue / 2, int.MinValue / 2, int.MaxValue, int.MaxValue), 0f, new System.Drawing.SizeF(1, 1), true); } System.Drawing.Image img = (System.Drawing.Image)image.Clone(); nativeGraphics.Dispose(); radGdi.Dispose(); return img; } }
To reproduce: - Add some connections and zoom. - Click a connection - The event is not fired. Workaround: Friend Class MyInputBehaviour Inherits DiagramInputBehavior Public Sub New(ByVal element As RadDiagramElement) MyBase.New(element) End Sub Public Overrides Function HandleMouseUp(ByVal e As MouseEventArgs) As Boolean ' return base.HandleMouseUp(e); If Me.DiagramElement.ElementTree.Control.Site IsNot Nothing Then Return False End If Dim elementUnderMouse As RadElement = Me.DiagramElement.ElementTree.GetElementAtPoint(e.Location) If Me.IsScrollBar(elementUnderMouse) Then Return False End If If TypeOf elementUnderMouse Is RadButtonElement Then Return False End If Dim position = e.Location Dim transform As Telerik.WinControls.Layouts.RadMatrix = Me.DiagramElement.MainPanel.TotalTransform transform.Invert() Dim transformedPosition = transform.TransformPoint(position) Dim service = Me.DiagramElement.Controller.ServiceLocator.GetService(Of IHitTestService)() Dim conectionUnderPoint = TryCast(service.GetItemsNearPoint(transformedPosition, DiagramConstants.SelectionHitTestRadius).Where(Function(i) TypeOf i Is IConnection).OrderByDescending(Function(x) x.ZIndex).FirstOrDefault(), IConnection) If conectionUnderPoint IsNot Nothing Then DirectCast(Me.DiagramElement, IGraphInternal).PublishDiagramEvent(DiagramEvent.ConnectionClicked, New GenericEventArgs(Of IConnection)(conectionUnderPoint, e)) End If Dim mi = Me.DiagramElement.GetType().GetMethod("UpdateFocusedElement", System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic) mi.Invoke(Me.DiagramElement, Nothing) Return False End Function End Class Change like this: RadDiagram1.DiagramElement.InputBehavior = New MyInputBehaviour(RadDiagram1.DiagramElement)
By default, when you bind RadDiagram, RadDiagramShape items are created by the DiagramDataLayer. It would be nice to have the possibility to replace the DiagramDataLayer for example and override its CreateDiagramShapeItem method to use custom RadDiagramShapes.
Workaround call the InitializeDiagram method in the OnLoad method of the form. protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.InitializeDiagram(); }