Good-day,
I am trying to export a RadDiagram to an SVG Image, I would like to find out if it is possible to do so and how to do it.
I look forward to hearing from you.
Regards,
Tanaka
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) { }
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: run the attached sample project and follow the steps in the gif file. When you start dragging, (i.e. when MouseMove first fires) there is a large jump to the position of the image.
To reproduce: create a RadDiagram with several shapes. Try to zoom and pan with the gesture. Sometimes the shapes jumps.
Please refer to the attached gif file illustrating how to reproduce the problem. Workaround: use the following approach for exporting to an image: private void radButton1_Click(object sender, EventArgs e) { RadScrollBarElement horizontalScrollBar = this.radDiagram1.DiagramElement.Children[1] as RadScrollBarElement; RadScrollBarElement verticalScrollBar = this.radDiagram1.DiagramElement.Children[2] as RadScrollBarElement; this.Size = new System.Drawing.Size(this.Size.Width + (horizontalScrollBar.Maximum - this.radDiagram1.Size.Width), this.Size.Height + (verticalScrollBar.Maximum + 1 - this.radDiagram1.Height)); Application.DoEvents(); Bitmap bmp = new Bitmap(radDiagram1.Width, radDiagram1.Height, PixelFormat.Format32bppArgb); this.radDiagram1.DrawToBitmap(bmp, new Rectangle(0, 0, radDiagram1.Width, radDiagram1.Height)); bmp.Save(@"..\..\test2.bmp"); System.Diagnostics.Process.Start(@"..\..\test2.bmp"); }
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 call the InitializeDiagram method in the OnLoad method of the form. protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.InitializeDiagram(); }
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.
To reproduce: 1. Add a RadDiagram to the form and open its property builder at design time. 2. Add a RadDiagramShape and set some value to the shape's Tag property. 3. Save the changes and exit the property builder. When you run the application you will notice that the Tag property of the shape is not stored.
Please refer to the attached sample project. If you drag a new shape or copy/paste an existing one it is not added to the DataSource collection as it is added in RadGanttView for example. Workaround: handle the ItemsChanged event and add a new record to the DataSource manually.
By using these events the user will be able to easily cancel moving of a shape in certain conditions.
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(); }